使用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()
.. split
和split
... 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(), split
和split, end()
这样的“head”和“tail”范围,因为它们不是反向迭代器。有没有办法将反向迭代器转换为相应的前向(或随机访问)迭代器?有没有更好的方法来查找序列中元素的最后一个实例,以便我留下兼容的迭代器?
答案 0 :(得分:23)
但现在的问题是我做不到 使用“制造”头部和“尾部”范围 begin()和end()因为那些不是 反向迭代器。
reverse_iterator::base()
正是您要寻找的内容 - SGIs reverse_iterator description或here on cppreference.com上的新成员
答案 1 :(得分:6)
std::find_end怎么样? (查找序列的最后一次出现)