如何反转C ++向量?

时间:2012-01-16 08:44:30

标签: c++ vector stl std

C ++中是否有内置的向量函数来反转向量?

或者您只需要手动完成吗?

6 个答案:

答案 0 :(得分:219)

为此目的,std::reverse标题中有一个函数algorithm

#include <vector>
#include <algorithm>

int main() {
  std::vector<int> a;
  std::reverse(a.begin(), a.end());
  return 0;
}

答案 1 :(得分:37)

所有容器都使用rbegin()rend()提供其内容的反向视图。这两个函数返回so-calles reverse iterators ,它可以像普通的那样使用,但看起来容器实际上是反转的。

#include <vector>
#include <iostream>

template<class InIt>
void print_range(InIt first, InIt last, char const* delim = "\n"){
  --last;
  for(; first != last; ++first){
    std::cout << *first << delim;
  }
  std::cout << *first;
}

int main(){
  int a[] = { 1, 2, 3, 4, 5 };
  std::vector<int> v(a, a+5);
  print_range(v.begin(), v.end(), "->");
  std::cout << "\n=============\n";
  print_range(v.rbegin(), v.rend(), "<-");
}

Live example on Ideone。输出:

1->2->3->4->5
=============
5<-4<-3<-2<-1

答案 2 :(得分:18)

您可以像这样使用std::reverse

std::reverse(str.begin(), str.end());

答案 3 :(得分:2)

您也可以使用std::list代替std::vectorlist有一个用于反转元素的内置函数list::reverse

答案 4 :(得分:1)

通常想要反转向量的原因是因为您通过将所有项目推到最后来填充它,但实际上却以相反的顺序接收它们。在这种情况下,您可以通过使用deque来反转容器,而直接将其推到前面。 (或者,您也可以使用vector::insert()在前面插入项目,但是当有很多项目时,这样做会很慢,因为每次插入都必须将所有其他项目都洗牌。)与:< / p>

std::vector<int> foo;
int nextItem;
while (getNext(nextItem)) {
    foo.push_back(nextItem);
}
std::reverse(foo.begin(), foo.end());

您可以改为:

std::deque<int> foo;
int nextItem;
while (getNext(nextItem)) {
    foo.push_front(nextItem);
}
// No reverse needed - already in correct order

答案 5 :(得分:0)

#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
int main()
{
    vector<int>v1;
    for(int i=0; i<5; i++)
        v1.push_back(i*2);
    for(int i=0; i<v1.size(); i++)
        cout<<v1[i];    //02468
    reverse(v1.begin(),v1.end());
    
    for(int i=0; i<v1.size(); i++)
        cout<<v1[i];   //86420
}