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

时间:2009-12-23 23:23:35

标签: c++ algorithm stl find

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

此示例将在int的向量中找到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设置为 last 实例为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);

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

2 个答案:

答案 0 :(得分:23)

  

但现在的问题是我做不到   使用“制造”头部和“尾部”范围   begin()和end()因为那些不是   反向迭代器。

reverse_iterator::base()正是您要寻找的内容 - SGIs reverse_iterator descriptionhere on cppreference.com上的新成员

答案 1 :(得分:6)

std::find_end怎么样? (查找序列的最后一次出现)