gpt4 book ai didi

C++ deque迭代到倒数第二个元素

转载 作者:搜寻专家 更新时间:2023-10-31 00:09:26 26 4
gpt4 key购买 nike

我正在尝试遍历双端队列直到排除最后一个条目。理想情况下,我会避免计算和比较长度,所以我尝试了

    auto it_end = dq.rbegin(); it_end++;
for ( auto it = dq.begin(); it !=it_end; ) {
if ( cond() ) {
it = dq.erase( it );
} else {
it++;
}
}

但是编译器提示没有匹配操作数,这似乎可以理解,因为我有一个反向迭代器和一个常规迭代器。有没有一种优雅的方法可以在避免计数的最后一个元素之前停止?比如,抵消?我也试过 usign back,但结果是引用而不是迭代器,所以 != 也不高兴。

最佳答案

你可以只使用 dq.end() - 1 在结束前得到一个。

您还可以使用 std::removestd::remove_if 来删除您想要的项目,而不是自己完成这项工作。请注意,这基本上有点像分区操作——它返回一个迭代器,您想要保留的所有内容都是从范围的开头到该迭代器。您要删除的所有内容都在该迭代器之后,直到您作为输入提供的范围的末尾。

在这种情况下,您可以按照以下一般顺序执行某些操作:

std::deque<int> vals { 1, 2, 3, 4, 5, 6, 7, 8};

// get an iterator one before the end of `vals`
auto end = vals.end()-1;

// remove the even items in the range (so all except `8`)
auto pos = std::remove_if(vals.begin(), end,
[](int v){ return v %2 == 0;}
);

// erase the items we just "removed"
vals.erase(pos, end);

// show the result
for (v : vals)
std::cout << v << ", ";

关于C++ deque迭代到倒数第二个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43271285/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com