2010-08-07 2 views
0

예를 들어 다음과 같은 유효한?벡터에 허용되는 활성 반복기의 수

std::vector<int> vec(5, 0); 
std::vector<int>::const_iterator it1(vec.begin()); 
std::vector<int>::const_iterator it2(vec.begin()); 
//Use it1 and it2 like they don't know about each other. 

활성 이터레이터를 여러 개 허용하는 컨테이너에 특별한 이름이 있습니까?

답변

1

예, 유효합니다.

시스템에 반복자를 보유 할 메모리가 있으면 벡터에 반복기를 많이 가질 수 있습니다.

이 컨테이너 유형의 특수 이름은 "모든 STL 컨테이너"입니다. 모든 컨테이너에서 허용됩니다.

허용되지 않아야하는 이유를 설명해주세요.

0

다른 이터레이터를 유효하지 않게 만드는 작업을 수행하지 않는 한, 반복기 수에는 제한이 없습니다. 삽입 (insert) 또는 제거 (remove)와 같은 일부 연산은 다른 모든 반복기를 무효로 만들 수 있습니다. STL 컨테이너 반복자가 작동하는 방식에 따라, (일반적으로) 다른 반복자를 통해 삽입 및 제거를 처리 할 수있는 방법이 없습니다.

요소 삽입/제거에 컨테이너 함수를 사용하면 이터레이터를 유효하지 않게 렌더링합니다.

근본적인 문제는 STL 컨테이너가 활성 이터레이터에 대해 아무것도 모르기 때문에 반복기에 변경된 사항이 있음을 알릴 수 없다는 것입니다.

0

확실히 허용됩니다. 요소를 지우거나 삽입하기 시작하면 걱정해야 할 것이 있습니다. 다른 컨테이너는 함수를 수정하여 반복자를 무효화하는 동작이 다르므로 문서를 살펴 봐야합니다. 예를 들어, vector에있는 erase은 지우는 요소 이후의 모든 반복기 및 요소 참조를 무효화합니다.