如何反转C++向量?

Sir*_*lot 130 c++ stl vector std

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

或者你只需​​要手动完成吗?

izo*_*ica 233

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

#include <vector>
#include <algorithm>

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


Xeo*_*Xeo 41

所有容器提供了一个相反的观点其内容与rbegin()rend().这两个函数返回so-calles 反向迭代器,它可以像普通的那样使用,但看起来容器实际上是反转的.

#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(), "<-");
}
Run Code Online (Sandbox Code Playgroud)

Ideone上的实例.输出:

1->2->3->4->5
=============
5<-4<-3<-2<-1
Run Code Online (Sandbox Code Playgroud)

  • @CashCow:嗯,对于一个,这是一个无操作,它是O(1).扭转..不是那么多.大多数情况下,你并不需要一个反向容器,你只需要*看*它是反向的.事实上,我想不出你需要一个无法用反向迭代器解决的反向容器的情况. (16认同)
  • @CashCow:优雅并不总是真正的优雅.在大多数情况下,在我的职业生涯中,我只需要一个反向视图,但不需要反向矢量.在所有这些情况下,如果您创建更多副本或转换顺序,性能将完全不必要.如果你只需要以未指定的顺序排在前10位,那么你也可以`std :: sort`一个1000元素向量,因为它比`std :: partition`更优雅吗?正如15年前那样,这种思想破坏了我今天的PC体验,不同之处在于浪费了更多的周期,数十亿. (4认同)

Chu*_*ris 20

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

std::reverse(str.begin(), str.end());
Run Code Online (Sandbox Code Playgroud)

  • 两分钟的变化令人惊奇。 (2认同)