development

C ++ STL Vectors : 인덱스에서 반복자를 가져 옵니까?

big-blog 2020. 5. 13. 20:34
반응형

C ++ STL Vectors : 인덱스에서 반복자를 가져 옵니까?


그래서 index []로 stl 벡터의 요소에 액세스하는 많은 코드를 작성했지만 이제는 벡터 덩어리를 복사해야합니다. 것 같습니다 vector.insert(pos, first, last)난 단지 제의 int로서 마지막이 제외 ... 내가 원하는 기능입니다. 이 값에 대한 반복자를 얻을 수있는 좋은 방법이 있습니까?


이 시도:

vector<Type>::iterator nth = v.begin() + index;

@dirkgently에 의해 언급 된 방법 ( v.begin() + index )은 벡터 에 좋고 훌륭합니다.

그러나 가장 일반적인 방법과 무작위 액세스 반복자도 일정한 시간 동안 작동합니다.std::advance( v.begin(), index )


사용법의 차이점 편집 :

std::vector<>::iterator it = ( v.begin() + index );

또는

std::vector<>::iterator it = v.begin();
std::advance( it, index );

@litb 메모 뒤에 추가되었습니다.


또한; auto it = std::next(v.begin(), index);

업데이트 : C ++ 11x 호환 컴파일러 필요


아니면 사용할 수 있습니다 std::advance

vector<int>::iterator i = L.begin();
advance(i, 2);

실제로 std :: vector는 필요할 때 C 탭으로 사용됩니다. (C ++ 표준 은 Wikipedia에서 배열을 대체하는 것으로 알고있는 한 벡터 구현을 요구합니다 .)

int main()
{

void foo(const char *);

sdt::vector<char> vec;
vec.push_back('h');
vec.push_back('e');
vec.push_back('l');
vec.push_back('l');
vec.push_back('o');
vec.push_back('/0');

foo(&vec[0]);
}

물론, foo는 매개 변수로 전달 된 주소를 복사하여 어딘가에 저장하지 않아야합니다. 또는 프로그램에서 vec에 새 항목을 넣지 않거나 용량 변경을 요청하지 않아야합니다. 또는 위험 세분화 오류 ...

따라서 당신의 예에서 그것은

vector.insert(pos, &vec[first_index], &vec[last_index]);

참고 URL : https://stackoverflow.com/questions/671423/c-stl-vectors-get-iterator-from-index

반응형