首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >迭代到第二个最后元素的C++方法

迭代到第二个最后元素的C++方法
EN

Stack Overflow用户
提问于 2017-04-07 06:39:01
回答 4查看 2.3K关注 0票数 2

我正试图迭代一遍,直到排除最后一项。理想情况下,我会避免计算和比较长度,所以我尝试

代码语言:javascript
运行
复制
    auto it_end = dq.rbegin(); it_end++;
    for ( auto it = dq.begin(); it !=it_end; ) {
        if ( cond() ) {
            it = dq.erase( it );
        } else {
            it++;
        }
    }

但是编译器抱怨没有匹配的操作数,这似乎可以理解,因为我有一个反向迭代器和一个常规迭代器。在避免计数的最后一个元素之前,是否有一种优雅的方式来停止?就像,补偿?我也尝试过返回,但结果是引用而不是迭代器,所以!=也不高兴。

EN

Stack Overflow用户

发布于 2017-04-07 07:00:41

使用it_end.base()

代码语言:javascript
运行
复制
#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;
}

产出:

代码语言:javascript
运行
复制
0 1 2 3 4

有关base()函数如何为反向迭代器工作的详细信息,请参阅base()

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43271285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档