我正试图迭代一遍,直到排除最后一项。理想情况下,我会避免计算和比较长度,所以我尝试
auto it_end = dq.rbegin(); it_end++;
for ( auto it = dq.begin(); it !=it_end; ) {
if ( cond() ) {
it = dq.erase( it );
} else {
it++;
}
}但是编译器抱怨没有匹配的操作数,这似乎可以理解,因为我有一个反向迭代器和一个常规迭代器。在避免计数的最后一个元素之前,是否有一种优雅的方式来停止?就像,补偿?我也尝试过返回,但结果是引用而不是迭代器,所以!=也不高兴。
发布于 2017-04-07 07:00:41
使用it_end.base()
#include <iostream>
#include <deque>
#include <iterator>
using namespace std;
int main()
{
deque<int> dq = { 0, 1, 2, 3,4, 5 };
auto it_end = dq.rbegin(); it_end++;
for (auto it = dq.begin(); it != it_end.base(); ++it) {
cout << *it << " ";
}
cout << "\n";
return 0;
}产出:
0 1 2 3 4有关base()函数如何为反向迭代器工作的详细信息,请参阅base()。
https://stackoverflow.com/questions/43271285
复制相似问题