cdl*_*ary 27 c++ maps iterator stl
我试图找出确定我是否在地图循环的最后一次迭代中的最佳方法,以便执行以下操作:
for (iter = someMap.begin(); iter != someMap.end(); ++iter) {
bool last_iteration;
// do something for all iterations
if (!last_iteration) {
// do something for all but the last iteration
}
}
Run Code Online (Sandbox Code Playgroud)
似乎有几种方法可以做到这一点:随机访问迭代器,distance
函数等.规范方法是什么?
编辑:没有地图的随机访问迭代器!
Mar*_*som 25
典范?我不能声称,但我建议
final_iter = someMap.end();
--final_iter;
if (iter != final_iter) ...
Run Code Online (Sandbox Code Playgroud)
按照KTC的建议编辑纠正.(谢谢!有时候你走得太快,搞砸了最简单的事情......)
小智 17
从C++ 11开始,你也可以使用std :: next()
for (auto iter = someMap.begin(); iter != someMap.end(); ++iter) {
// do something for all iterations
if (std::next(iter) != someMap.end()) {
// do something for all but the last iteration
}
}
Run Code Online (Sandbox Code Playgroud)
虽然问题是在不久前提出的,但我认为值得分享.
Tor*_*ack 14
这似乎是最简单的:
bool last_iteration = iter == (--someMap.end());
Run Code Online (Sandbox Code Playgroud)
如果您只想使用ForwardIterator,这应该有效:
for ( i = c.begin(); i != c.end(); ) {
iterator cur = i++;
// do something, using cur
if ( i != c.end() ) {
// do something using cur for all but the last iteration
}
}
Run Code Online (Sandbox Code Playgroud)
修改了Mark Ransom,它实际上按预期工作.
finalIter = someMap.end();
--finalIter;
if (iter != final_iter)
Run Code Online (Sandbox Code Playgroud)
惊讶没有人提到它,但当然提升有一些东西;)
Boost.Next(和等效的Boost.Prior)
你的例子看起来像:
for (iter = someMap.begin(); iter != someMap.end(); ++iter) {
// do something for all iterations
if (boost::next(iter) != someMap.end()) {
// do something for all but the last iteration
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22734 次 |
最近记录: |