我可以使用下面的迭代器来反转遍历(它是否正确?):
for (auto it=foo.end()-1; it != foo.begin()-1; it--)
DoSomethingHere(it);
我一直在向量上做这个。但是,从Dr. Dobbs article开始,迭代器实现似乎可能会有所不同。我担心它会在其他类的迭代器上失败。
如果上述实现是正确的,是首选还是首选的反向迭代器:
for (auto it = foo.rbegin(); it != foo.rend(); it++)
DoSomethingHere(it);
此优惠问题的相关文章/ Q& A可在以下网址找到:
答案 0 :(得分:1)
foo.begin()-1
产生未定义的行为,所以不,这不是一个好主意。
鉴于你正在做完全反向迭代器的设计目的,这似乎是明显的做事方式。反向迭代器肯定存在局限性,但对于许多情况(包括上面概述的内容),它们只是无关紧要。
顺便说一下,你的第二个循环基本上等同于:
std::for_each(foo.rbegin(), r.rend(), DoSomethinghere);
除了({1}}将传递迭代器指向的项的(通常不相关的)细节,而不是迭代器本身。