有没有打印以相反的顺序向量那么这更好的方法:
#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());
}
有很多方法可以打印反向双向序列不可逆的元素,例如:
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"));
您可以使用反向迭代器:
for_each(vec.rbegin(),vec.rend(),print_elem);
使用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
有很多方法来干这事将只是一个解释,更可在this链接中可以看出。
使用恒定反向迭代(crbegin):
反向迭代器遍历落后即增加他们移动他们向容器的开始。
要检查是否我们已经达到开始时,我们可以使用(在我的情况下,x)的迭代变量与crend比较(返回矢量的起始点)。记住一切都颠倒了!
下面是一个简单的实现:
for(auto x = vec.crbegin() ; x!=vec.crend() ; x++){
cout<<*x<<" ";
}