【发布时间】:2010-12-29 16:17:01
【问题描述】:
使用 STL,我想在一个序列中找到某个值的最后一个实例。
此示例将在整数向量中找到 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() 执行操作。我想做类似的事情,但将拆分设置为 0 的 last 实例。我的第一直觉是使用反向迭代器。
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() 这样的“头”和“尾”范围,因为它们不是反向迭代器。有没有办法将反向迭代器转换为相应的正向(或随机访问)迭代器?有没有更好的方法来查找序列中元素的最后一个实例,以便留下兼容的迭代器?
【问题讨论】: