【发布时间】:2021-06-03 22:13:35
【问题描述】:
我想在向量上使用std::copy,但以相反的顺序复制元素。由于vector::begin() 返回一个随机访问迭代器,这似乎是可行的。
当然,我可以在前后使用std::reverse,但这会效率低下。
【问题讨论】:
-
std::vector有rbegin和rend。
标签: c++ algorithm c++11 vector iterator
我想在向量上使用std::copy,但以相反的顺序复制元素。由于vector::begin() 返回一个随机访问迭代器,这似乎是可行的。
当然,我可以在前后使用std::reverse,但这会效率低下。
【问题讨论】:
std::vector 有 rbegin 和 rend 。
标签: c++ algorithm c++11 vector iterator
STL 有一个std::reverse_copy 函数模板,其工作方式与std::copy 完全相同,但反向复制。
【讨论】:
类模板std::vector 提供反向迭代器。因此,您可以使用rbegin 和rend,而不是成员函数或独立函数begin 和end。
这是一个演示程序。
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
int main()
{
std::vector<int> v = { 1, 2, 3, 4, 5 };
std::copy( std::rbegin( v ), std::rend( v ),
std::ostream_iterator<int>( std::cout, " " ) );
std::cout << '\n';
return 0;
}
程序输出是
5 4 3 2 1
【讨论】: