2012-10-01 31 views
4

我有一個std::multimap我正在迭代使用前向迭代器。C++從地圖的第二個元素迭代

std::multimap<int,char>::iterator it; 
for(it=map.begin();it!=map.end();++it) { 
    // do something 
} 

現在我需要以不同的方式處理第一個元素,並從地圖的第二個元素開始迭代。我怎麼做?

回答

11
std::multimap<int,char>::iterator it; 

for(it = std::next(map.begin()); it != map.end(); ++it) { 
    // do something 
} 

這只是C++ 11。您需要包含<iterator>

另一種選擇是顯而易見的,但不漂亮:

it = map.begin(); 
++it; 
for(; it != map.end(); ++it) { 
    // do something 
} 

看看std::advance,太。

+3

當然,如果地圖不爲空,這是唯一安全的! :) –

2
std::multimap<int,char>::iterator it = map.begin(); 
//treat it here 
++it 
for(;it!=map.end();++it) { 

} 
+0

這只是一個提示,他似乎不知道如何去做 –

1
for(bool First=true, it=map.begin();it!=map.end();++it) { 
    if (First) { do something; First=false; } 
    else { do something else; } 
} 

或者,如果你喜歡:

iterator it=map.begin(); 
if (it!=map.end()) { do something; ++it; } 
for (; it!=map.end(); ++it) { do something } 
1

變化it = map.begin()在換初始化器it = map.begin(), ++it

+0

也就是說,如果你沒有C++ 11。如果你這樣做,@jrok的解決方案更好。 –

3

似乎看起來更短

it = ++map.begin();