【发布时间】:2019-01-17 06:38:26
【问题描述】:
有没有比下面的代码更好的方法,使用相同的迭代器在任一方向上迭代容器?
#include <iostream>
#include <map>
int main()
{
const bool descend = false;
std::map<int, int> mapp;
mapp[1] = 1;
mapp[2] = 2;
mapp[3] = 3;
mapp[4] = 4;
std::map<int, int>::iterator startIter = descend ? --(mapp.end()) : mapp.begin();
std::map<int, int>::iterator endIter = descend ? --(mapp.begin()) : mapp.end();
while (startIter != endIter)
{
std::cout << startIter->first << std::endl;
descend ? --startIter : ++startIter;
}
}
【问题讨论】:
-
rbegin()和rend()? -
任何工作方式都会更好,因为这是 UB:
--(mapp.begin()) -
@Slava 真的吗?
rend会在开始之前指向什么? -
@NathanOliver
rend()应该是从begin()创建的反向迭代器,同样的方式rbegin()是从end()创建而不是end() - 1 -
@NathanOliver 不,你错了 - en.cppreference.com/w/cpp/iterator/reverse_iterator/operator* “将元素的引用或指针返回到当前元素上一个。”