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 y a une fonction std::reverse
dans l'en- algorithm
tête à cet effet.
#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()
etrend()
. Ces deux fonctions renvoient des itérateurs inversés , qui peuvent être utilisés comme des fonctions normales, mais il semblera que le conteneur est en fait inversé.Exemple en direct sur Ideone . Production:
la source
std::sort
un vecteur de 1000 éléments, si vous avez juste besoin du top-10 dans un ordre non spécifié, car il est plus élégant questd::partition
? C'est l'école de pensée qui paralyse mon expérience informatique aujourd'hui comme elle le faisait il y a 15 ans, à la différence que davantage de cycles sont gaspillés, des milliards d'entre eux.print_range
n'est pas correct: cela ne fonctionnera pas lorsque la plage vide est passée.std::reverse(a.rbegin(), a.rend())
faire? ; ^)Vous pouvez utiliser
std::reverse
comme çala source
Vous pouvez également utiliser à la
std::list
place destd::vector
.list
a une fonction intégrée list :: reverse pour inverser les éléments.la source
Souvent, la raison pour laquelle vous souhaitez inverser le vecteur est que vous le remplissez en appuyant sur tous les éléments à la fin, mais que vous les receviez dans l'ordre inverse. Dans ce cas, vous pouvez inverser le conteneur au fur et à mesure en utilisant un à la
deque
place et en le poussant directement sur le devant. (Ou vous pouvez insérer les éléments à l'avant avec à lavector::insert()
place, mais ce serait lent quand il y a beaucoup d'éléments car il doit mélanger tous les autres éléments le long de chaque insertion.) Donc, par opposition à:Vous pouvez à la place faire:
la source
la source