如何反转C ++向量?

How do I reverse a C++ vector?

C ++中是否有内置矢量功能可以将矢量反向转换到位?

还是只需要手动进行?


为此,在algorithm标头中有一个函数std::reverse

1
2
3
4
5
6
7
8
#include <vector>
#include

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


所有容器都使用rbegin()rend()提供其内容的相反视图。这两个函数返回所谓的反向迭代器,可以像普通迭代器一样使用,但是看起来容器实际上是反向的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <vector>
#include <iostream>

template<class InIt>
void print_range(InIt first, InIt last, char const* delim ="\
"
){
  --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 <<"\
=============\
"
;
  print_range(v.rbegin(), v.rend(),"<-");
}

有关Ideone的实时示例。输出:

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


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

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


您也可以使用std::list代替std::vectorlist具有内置的功能列表:: reverse,用于反转元素。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include
#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
}


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

1
2
3
4
5
6
std::vector<int> foo;
int nextItem;
while (getNext(nextItem)) {
    foo.push_back(nextItem);
}
std::reverse(foo.begin(), foo.end());

您可以改为:

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