2012-05-21 106 views
9

我用的是這樣的:map :: begin()對於空映射的返回值是什麼?

map<string, Data>::iterator it = mymap->begin(); 
map<string, Data>::iterator end = mymap->end(); 

while (it != end) { 
    // do stuff 
    ++it; 
} 

我只是想知道這是否會工作,即使該映射爲空。 如果地圖不是空的,我找不到任何有關map :: begin()返回的信息。

+0

我可以建議只創建一個小程序來測試它嗎? –

+1

'std :: distance(begin,end)'將爲零。 –

+0

不錯!我不知道這個功能。 – HWende

回答

15

如果地圖是空的,beginend迭代器是相等的,即返回mymap->end()

+0

這是真的,如果地圖可能已經是空的,你應該總是比較'begin()'返回的迭代器到'end()'之前使用它(注意你的循環如何使用while()...'not 'do ... while()',所以它在執行受控語句之前正確測試)。你問什麼是價值 - 它可以是任何提供它的與'end()'相等的東西,並且需要迭代器與實際元素不同...標準使編譯器/實現選擇合適的值。 –

+0

我想最好測試'map :: empty()'是不是? –

-1

你不能試圖增加一個迭代器, 或DEREFERENCE迭代器到一個空的地圖,這就是爲什麼你必須有你的代碼中的語句代碼來檢查地圖和/或迭代器之前,你使用它。

+0

'if'語句不是唯一的條件語句,問題中使用的'while'也可以很好地工作。 –

+0

對於空地圖將'it == end'。所以代碼不會在while循環中輸入。這意味着你不會有解引用迭代器的問題。 –

相關問題