STL 算法的反向迭代
Posted
技术标签:
【中文标题】STL 算法的反向迭代【英文标题】:Reverse Iteration of an STL Algorithm 【发布时间】:2014-05-07 11:18:57 【问题描述】:我有一个函数,它使用 2 个参数指针调用,即数组的开头和结尾。我的函数将从结束指针到开始指针搜索匹配条件的元素。
如果我尝试向前迭代,我可以使用find_if
来执行此操作,但我需要反向迭代。 STL 对此有任何规定吗?
注意:我可以在 for 循环中轻松完成此操作。我正在寻找的是一个更优雅的解决方案。
【问题讨论】:
遗憾的是,我只是提供一个函数,供我正在使用的一些讨厌的代码调用。 我错过了表明它是普通数组的点,并且已经有解决方案所以我删除了我的评论。 【参考方案1】:是的,它被称为std::reverse_iterator。一个例子:
template<typename RandomAccessIterator>
void reverse_sort(RandomAccessIterator begin, RandomAccessIterator end)
typedef std::reverse_iterator<RandomAccessIterator> r_iter_t;
std::sort(r_iter_t(end), r_iter_t(begin));
int main()
int arr[] = 1, 2, 3 ;
reverse_sort(std::begin(arr), std::end(arr));
for(auto i : arr) std::cout << i << "\n";
给予
3
2
1
【讨论】:
std::begin
和 std::end
不适用于函数参数。它们仅适用于本地声明的固定大小的数组指针。
@JonathanMee begin
/end
可以处理很多事情,包括通过引用传递给您的函数的数组,但这不是重点。您有一个开始和结束迭代器,只需将它们传递到我传递开始和结束迭代器的地方。 如何获得它们实际上并不重要。
@JonathanMee 我已经重写了这个例子,所以你可以看到为什么std::begin
/std::end
对解决方案的可行性没有任何影响
您可以使用std::make_reverse_iterator
自动进行类型推断。
@C.R.最后。我不知道这已被添加到 C++1y 中。以上是关于STL 算法的反向迭代的主要内容,如果未能解决你的问题,请参考以下文章