以相反的顺序打印向量

问题描述 投票:2回答:4

有没有打印以相反的顺序向量那么这更好的方法:

#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());
}
c++ vector stl
4个回答
16
投票

有很多方法可以打印反向双向序列不可逆的元素,例如:

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"));

18
投票

您可以使用反向迭代器:

for_each(vec.rbegin(),vec.rend(),print_elem);

3
投票

使用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


1
投票

有很多方法来干这事将只是一个解释,更可在this链接中可以看出。

使用恒定反向迭代(crbegin):

反向迭代器遍历落后即增加他们移动他们向容器的开始。

要检查是否我们已经达到开始时,我们可以使用(在我的情况下,x)的迭代变量与crend比较(返回矢量的起始点)。记住一切都颠倒了!

下面是一个简单的实现:

for(auto x = vec.crbegin() ; x!=vec.crend() ; x++){
        cout<<*x<<" ";
}
© www.soinside.com 2019 - 2024. All rights reserved.