IT TIP

반복기의 기본값은 무엇입니까?

itqueen 2020. 12. 8. 20:32
반응형

반복기의 기본값은 무엇입니까?


사용중인 STL 컨테이너의 경우 반복기의 기본 생성자를 사용하여 반복기 (이 특정 컨테이너 유형의)를 선언하면 반복기가 무엇으로 초기화됩니까?

예를 들면 다음과 같습니다.

std::list<void*> address_list;
std::list<void*>::iterator iter;

iter는 무엇으로 초기화됩니까?


규칙에 따라 결과가 없음을 나타내는 데 사용되는 컨테이너의 "NULL 반복자"는의 결과와 동일하게 비교 container.end()됩니다.

 std::vector<X>::iterator iter = std::find(my_vec.begin(), my_vec.end(), x);
 if (iter == my_vec.end()) {
     //no result found; iter points to "nothing"
 }

그러나 기본적으로 생성 된 컨테이너 반복자는 특정 컨테이너와 연결되어 있지 않으므로 취할 수있는 좋은 값이 없습니다. 따라서 이것은 초기화되지 않은 변수 일 뿐이며 유효한 반복자를 할당하는 것뿐입니다.

 std::vector<X>::iterator iter;  //no particular value
 iter = some_vector.begin();  //iter is now usable

다른 종류의 반복자의 경우 이는 사실이 아닐 수 있습니다. 예를 들어의 경우 istream_iterator기본 생성 반복자는 istream_iterator입력 스트림의 EOF에 도달 한 을 나타냅니다 (같음 비교) .


기본 생성자는 반복기를 단일 값으로 초기화합니다 .

반복자는 시퀀스와 연관되지 않은 특이 값을 가질 수도 있습니다. [예 : int * x;와 같이 초기화되지 않은 포인터 x 선언 후에 x는 항상 포인터의 특이 값을 갖는 것으로 가정해야합니다. —end example] 대부분의 표현식의 결과가 특이 값에 대해 정의되지 않음 [24.2.1 §5]


이터레이터는 초기화되지 않은 int x;정수를 선언하는 것처럼 초기화되지 않습니다. 적절하게 정의 된 값이 없습니다.

참고 URL : https://stackoverflow.com/questions/3395180/what-is-an-iterators-default-value

반응형