【发布时间】:2017-09-27 22:47:06
【问题描述】:
假设我有一个 std::map 并且想要对具有键 X 的项目和具有更高键的每个项目做一些事情(请记住,这是一个有序映射)。代码一目了然:
auto iter = mymap.find(X);
while (iter != mymap.end()) {
process(*iter);
iter++;
}
或者,可能更好,std::for_each(mymap.find(X), mymap.end(), process)。
但是,如果我的任务是对带有键 X 的项目和带有 lower 键的每个项目执行处理,那么我找不到表达意图的干净编码模式。
auto iter mymap.find(x);
if (iter != mymap.end()) {
iter++; // Go forward...
while (iter != mymap.begin()) {
iter--; // ... so we can go backwards
process(*iter);
}
}
如果我不想以相反的顺序执行它们,那么增加 std::map::find() 返回的迭代器然后使用 std::for_each(mymap.begin(), 就很容易了incremented_iter, 进程)。
双向迭代器不是反向迭代器,所以我不能在 while() 循环中使用 mymap.rend() 作为“一开始”进行比较。
在 C++11 中(或者在 +14 或 +17 中,有什么好期待的)吗?
【问题讨论】:
-
reverse_iterator
标签: c++ c++11 containers