web-dev-qa-db-fra.com

Comment inverser un vecteur C ++?

Existe-t-il une fonction vectorielle intégrée en C++ pour inverser un vecteur en place?

Ou devez-vous simplement le faire manuellement?

123
SirYakalot

Il existe une fonction std::reverse dans l'en-tête algorithm à cette fin.

#include <vector>
#include <algorithm>

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

Tous les conteneurs offrent une vue inversée de leur contenu avec rbegin() et rend(). Ces deux fonctions renvoient des soi-disant inverseurs , qui peuvent être utilisés comme des normaux, mais il semblera que le conteneur est réellement inversé.

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

Exemple en direct sur Ideone . Sortie:

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

Vous pouvez utiliser std::reverse comme ceci

std::reverse(str.begin(), str.end());
19
Chuck Norris

Vous pouvez également utiliser std::list au lieu de std::vector. list a une fonction intégrée list :: reverse pour inverser les éléments.

2
Hello W