2017-09-10 2 views
1

아래 코드가 1 인 이유는 무엇입니까? multiset 컨테이너에는 절대로 1을 삽입하지 않습니다.C++ 멀티 세트 lower_bound에서 예기치 않은 결과가 발생했습니다.

#include <iostream> 
#include <set> 

int main() 
{ 
    std::multiset<int> mymultiset; 
    std::multiset<int>::iterator itlow; 

    mymultiset.insert(-3); 
    itlow = mymultiset.lower_bound (3); 
    std::cout << *itlow << endl; // output 1 

    return 0; 
} 
+2

end() - lower_bound를 확인하십시오. 반환 값 : 값보다 작지 않은 첫 번째 요소를 가리키는 반복자 또는 이러한 요소가없는 경우 마지막 항목입니다. –

+0

@ArtemyVysotsky, 끝 확인을 이해하지만 왜 1이 반환됩니까? 어디서 오는거야? –

답변

4

mymultiset.lower_bound(3)3 갈 수있는 용기에서 가장 낮은 위치를 반환하고, 그 용기의 끝 부분에 있습니다. 따라서 itlowmymultiset.end()과 같으며 역 참조 할 수 없습니다. std::cout << *itlow에는 정의되지 않은 동작이 있습니다.

+0

Thanks Pete, 정의되지 않은 동작이므로 1이 반환됩니다. 대답을 답으로 표시하십시오. –

1

당신은 자신의 하한값이 3이고 최대 값이 -3 인 Iterator를 얻으려고합니다. 따라서 여러분은 그의 값이 정의되지 않은 최종 반복자를가집니다. multiset::begin()을 반복자로 사용하거나 itlow = mymultiset.lower_bound (-4);과 같이 매우 가볍게 입력해야합니다.

관련 문제