[英]Printing vector in reverse order
有没有更好的方式以相反的顺序打印矢量然后这个:
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
void print_elem(int elem)
{
cout << elem << endl;
}
int main()
{
int ia[4]={1,2,3,4};
vector<int> vec(ia,ia+4);
reverse(vec.begin(), vec.end());
for_each(vec.begin(),vec.end(),print_elem);
reverse(vec.begin(), vec.end());
}
您可以使用反向迭代器:
for_each(vec.rbegin(),vec.rend(),print_elem);
有很多方法可以在不反转元素的情况下反向打印双向序列,例如:
std::copy(vec.rbegin(), vec.rend(), std::ostream_iterator<int>(std::cout, "\n"));
std::reverse_copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, "\n"));
使用reverse_iterator
而不是iterator
int main()
{
int ia[4]={1, 2, 3, 4};
vector<int> vec(ia,ia+4);
for(vector<int>::reverse_iterator it = vec.rbegin; it != vec.rend(); ++it)
{
std::cout << *it << std::endl;
}
}
输出将是:4, 3, 2, 1
在 C++20 中,您可以使用在range 库中找到并由 gcc 10支持的views::reverse 。
#include <iostream>
#include <vector>
#include <ranges>
int main()
{
std::vector V{0, 1, 2, 3, 4, 5, 6, 7};
for (auto v : V | std::views::reverse)
{
std::cout << v << " ";
}
return 0;
}
输出是:
7 6 5 4 3 2 1 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.