一尘不染

是否有STL算法来查找序列中值的最后一个实例?

algorithm

使用STL,我想找到序列中某个值的最后一个实例。

本示例将在ints向量中找到0 的 第一个 实例。

#include <algorithm>
#include <iterator>
#include <vector>

typedef std::vector<int> intvec;
intvec values;
// ... ints are added to values
intvec::const_iterator split = std::find(values.begin(), values.end(), 0);

现在我可以用split做事的子范围begin().. splitsplit.. end()。我想做类似的事情,但将split设置为0
最后一个 实例。我的第一个本能是使用反向迭代器。

intvec::const_iterator split = std::find(values.rbegin(), values.rend(), 0);

这是行不通的,因为split迭代器的类型错误。所以…

intvec::const_reverse_iterator split = std::find(values.rbegin(), values.rend(), 0);

但是现在的问题是,我不能像这样使“ head”和“ tail”范围变大begin(), splitsplit, end()因为它们不是反向迭代器。有没有办法将反向迭代器转换为相应的正向(或随机访问)迭代器?有没有更好的方法来查找序列中元素的最后一个实例,以便让我剩下兼容的迭代器?


阅读 264

收藏
2020-07-28

共1个答案

一尘不染

但是现在的问题是,我不能使用begin()和end()来创建“ head”和“ tail”范围,因为它们不是反向迭代器。

reverse_iterator::base()是您要寻找的-
SGI的verse_iterator描述cppreference.com上的
新成员
部分中

2020-07-28