Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否有STL算法来查找序列中某个值的最后一个实例?_C++_Algorithm_Stl_Find - Fatal编程技术网

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

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(

使用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
是错误类型的迭代器。所以

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中表达得最好