2012-05-21 4 views
9

나는 같은 것을 사용합니다. 지도가 비어있는 경우 map :: begin() 반환에 대한 정보를 찾을 수 없습니다.빈지도에 대한 map :: begin()의 반환 값은 무엇입니까? 이 맵이 비어있는 경우에도 작동한다면 난 그냥 궁금 해서요</p> <pre><code>map<string, Data>::iterator it = mymap->begin(); map<string, Data>::iterator end = mymap->end(); while (it != end) { // do stuff ++it; } </code></pre> <p>:

+0

방금 ​​테스트 할 작은 프로그램을 만드는 것이 좋습니다. –

+1

'std :: distance (begin, end)'는 0이됩니다. –

+0

니스! 나는이 기능을 몰랐다. – HWende

답변

15

지도가 비어있는 경우 beginend 반복자는 동일하며 즉 mymap->end()을 반환합니다.

+0

이것은 사실이며 맵이 비어있을 경우 사용하기 전에 항상'begin()'에 의해 반환 된 반복자를'end()'와 비교해야합니다 (루프가'while() ...'을 어떻게 사용하는지 주목하십시오) 'do ... while()', 제어 된 명령문을 실행하기 전에 올바르게 테스트합니다.) 당신은 값이 무엇인지를 물어 봅니다. 그것은 end()와 똑같이 비교할 수 있고, 실제 요소에 반복자가 필요하다는 것을 포함 할 수 있습니다. 표준은 컴파일러/구현에서 적절한 값을 선택합니다. –

+0

'map :: empty()'를 테스트하는 것이 더 낫다고 생각하지 않습니까? –

-1

이터레이터를 지나치게 늘리지 말아야합니다. 반복자를 빈지도로 만드십시오. 따라서 사용하기 전에지도 및/또는 반복기를 검사하기 위해 if 문을 코드에 포함시켜야합니다.

+0

'if' 문이 유일한 종류의 조건문은 아니며, 질문에 사용 된'while'도 잘 작동합니다. –

+0

빈지도의 경우 'it == end'이됩니다. 그래서 코드는 루프 동안 들어 가지 않습니다. 즉, 반복자를 역 참조하는 데 문제가 없을 것임을 의미합니다. –

관련 문제