Как я могу обратить вектор C ++? - PullRequest
122 голосов
/ 16 января 2012

Есть ли в C ++ встроенная векторная функция для обратного вектора?

Или вам просто нужно сделать это вручную?

Ответы [ 4 ]

220 голосов
/ 16 января 2012

Для этой цели в заголовке algorithm есть функция std::reverse.

#include <vector>
#include <algorithm>

int main() {
  std::vector<int> a;
  std::reverse(a.begin(), a.end());
  return 0;
}
38 голосов
/ 16 января 2012

Все контейнеры предлагают обратный просмотр своего содержимого с rbegin() и rend(). Эти две функции возвращают так называемые обратные итераторы , которые можно использовать как обычные, но будет выглядеть, как будто контейнер на самом деле перевернут.

#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(), "<-");
}

Живой пример на Ideone . Выход:

1->2->3->4->5
=============
5<-4<-3<-2<-1
19 голосов
/ 16 января 2012

Вы можете использовать std::reverse вот так

std::reverse(str.begin(), str.end());
2 голосов
/ 10 августа 2016

Вы также можете использовать std::list вместо std::vector.list имеет встроенную функцию list :: reverse для реверсивных элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...