따라서 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에서 배열을 대체하는 것으로 알고있는 한 벡터 구현을 요구합니다. ) 예를 들어,이 folowing을 수행하는 것은 완벽하게 합법적입니다.
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]);