C++ 是否有STL算法来查找序列中某个值的最后一个实例?
使用STL,我想找到序列中某个值的最后一个实例 此示例将在int向量中找到0的第一个实例C++ 是否有STL算法来查找序列中某个值的最后一个实例?,c++,algorithm,stl,find,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(
#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
是错误类型的迭代器。所以
intvec::const_reverse_iterator split = std::find(values.rbegin(), values.rend(), 0);
但现在的问题是,我不能创建像begin(),split
和split,end()
这样的“head”和“tail”范围,因为它们不是反向迭代器。有没有办法将反向迭代器转换为相应的正向(或随机访问)迭代器?有没有更好的方法来查找序列中元素的最后一个实例,这样我就剩下一个兼容的迭代器了
但现在的问题是我不能
使用以下命令创建“头部”和“尾部”范围
开始()和结束(),因为它们不是
反向迭代器
intvec::const_iterator split = std::find(values.rbegin(), values.rend(), 0);
reverse\u迭代器::base()
是您正在寻找的-在或上划分新成员?(查找序列的最后一次出现)+1了解有趣的方法。寻找一个元素的最后一个子序列肯定会奏效。但是将反向迭代器转换为其基类型更有效。请注意,reverse\u iterator::base()
不指向同一元素,而是指向找到的项后面的元素。Scott Meyer在本文的准则3:进入CPPFerence中表达得最好