Existe-t-il une fonction vectorielle intégrée en C++ pour inverser un vecteur en place?
Ou devez-vous simplement le faire manuellement?
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;
}
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
Vous pouvez utiliser std::reverse
comme ceci
std::reverse(str.begin(), str.end());
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.