這與this question類似,但不是重複的。我試圖迭代地圖並打印每個元素的值,但最後一個元素的輸出略有不同。在那個問題中,他們推薦使用map.rbegin().base()
,但它不適合我。檢測迭代器是否爲std :: map的最後一個元素
這裏是我的代碼:
#include <iostream>
#include <map>
int main()
{
std::map <char, int> charMap = { {'a', 1}, {'b', 2}, {'c', 3}, {'d', 4} };
for (auto iter = charMap.begin(); iter != charMap.end(); iter++)
{
std::cout << iter->first << ":\t" << iter->second;
if (iter == charMap.rbegin().base())
std::cout << "\t//This is the last element.\n";
else
std::cout << "\n";
}
}
我期望我的輸出看起來像這樣:
a: 1
b: 2
c: 3
d: 4 //This is the last element.
但是,相反,我得到這樣的輸出:
a: 1
b: 2
c: 3
d: 4
現在我意識到有更好的方法來做到這一點,但我希望這也能起作用。爲什麼我無法比較iter
和charMap.rbegin().base()
?
注意,在這種情況下,它往往容易改寫循環體,使得特殊處理髮生在第一,而不是最後一個元素。 –
@ChristianHackl請注意,這顯然不是這裏的情況:) – BartoszKP
@BartoszKP:爲什麼不呢?開始每一行,但第一行用換行符,在循環後放置「這是最後一個元素」。 –