C에서 다른 컨테이너의 반복자 비교
사용자 정의 반복자 구현의 맥락에서 근본적인 질문이 생깁니다. 반복자를 비교하는 것이 허용됩니까? 별도의 컨테이너에서? 예를 들어 다음 코드 조각을 살펴보겠습니다.
<code class="cpp">std::vector<int> foo; std::vector<int> bar; // Is this expression valid? foo.begin() == bar.begin();</code>
C 11 표준에 따르면:
동일 시퀀스 내의 반복자:
다른 컨테이너의 반복자 비교:
따라서 위의 예에서 foo.begin() 및 bar.begin()과 같은 다른 컨테이너의 반복자를 비교하는 것은 정의되지 않은 동작으로 간주됩니다.
이 정의되지 않은 동작 이는 반복자가 컨테이너 내의 특정 요소를 참조한다는 사실에서 비롯됩니다. 반복자가 다른 컨테이너에 속하는 경우 동일한 기본 시퀀스의 요소를 가리킨다고 가정할 수 없으므로 비교 시 정의되지 않은 결과가 생성됩니다.
LWG Issue #446:
이 문제를 명확히 하기 위해 LWG 문제 #446에서는 다음 텍스트를 표준에 추가할 것을 제안했습니다.
다음에서 얻은 비교 함수 또는 두 개의 반복자 값을 인수로 사용하는 이항 연산자를 직접 또는 간접적으로 평가한 결과 두 개의 서로 다른 범위는... 달리 명시적으로 설명되지 않는 한 정의되지 않습니다.
이 추가는 개별 컨테이너의 반복자를 비교하는 정의되지 않은 특성을 더욱 강조합니다.
위 내용은 C 정의 동작에서 다른 컨테이너의 반복자를 비교하고 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!