5

我有一个std::multimap我正在使用前向迭代器迭代的。

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

现在我需要区别对待第一个元素并从地图的第二个元素开始迭代。我怎么做?

4

5 回答 5

12
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

于 2012-10-01T19:32:53.247 回答
6

好像看起来更短

it = ++map.begin(); 
于 2012-10-01T21:01:30.037 回答
2
std::multimap<int,char>::iterator it = map.begin();
//treat it here
++it
for(;it!=map.end();++it) {

}
于 2012-10-01T19:34:03.527 回答
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 }
于 2012-10-01T19:34:24.120 回答
1

将 for-initializer更改it = map.begin()it = map.begin(), ++it.

于 2012-10-01T19:38:50.013 回答