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

Adr*_*thy 19 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);
Run Code Online (Sandbox Code Playgroud)

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

intvec::const_iterator split = std::find(values.rbegin(), values.rend(), 0);
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为split它是错误类型的迭代器.所以......

intvec::const_reverse_iterator split = std::find(values.rbegin(), values.rend(), 0);
Run Code Online (Sandbox Code Playgroud)

但现在的问题是我不能使"头"和"尾"范围像begin(), split,split, end()因为那些不是反向迭代器.有没有办法将反向迭代器转换为相应的前向(或随机访问)迭代器?有没有更好的方法来查找序列中元素的最后一个实例,以便我留下兼容的迭代器?

Geo*_*che 23

但现在的问题是我不能使用begin()和end()来制作"head"和"tail"范围,因为那些不是反向迭代器.

reverse_iterator::base()是您正在寻找的 - SGIs reverse_iterator描述的新成员cppreference.com上的新成员

  • [std::reverse_iterator::base](http://en.cppreference.com/w/cpp/iterator/reverse_iterator/base) 在 cppreference 中的条目 (2认同)

Jes*_*ond 6

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