是否有STL算法来查找序列中值的最后一个实例?
问题内容:
使用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()
.. split
和split
.. 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(), split
,split, end()
因为它们不是反向迭代器。有没有办法将反向迭代器转换为相应的正向(或随机访问)迭代器?有没有更好的方法来查找序列中元素的最后一个实例,以便让我剩下兼容的迭代器?
问题答案:
但是现在的问题是,我不能使用begin()和end()来创建“ head”和“ tail”范围,因为它们不是反向迭代器。
reverse_iterator::base()
是您要寻找的-
在SGI的verse_iterator描述或cppreference.com上的
新成员
部分中