std::reverse în C++

Inversează pe loc ordinea elementelor dintr-un interval.

Sintaxă
void reverse(BidirIt first, BidirIt last);

Ce face std::reverse

std::reverse schimbă între ele primul și ultimul element, al doilea și penultimul și așa mai departe, până la mijloc. Merge pe orice container cu iteratori bidirecționali, inclusiv std::string și std::list.

Dacă vrei doar să parcurgi invers fără să modifici datele, folosește rbegin()/rend() sau std::views::reverse.

Parametri

Parametru Descriere
first, last Intervalul inversat.

Ce returnează

Nimic.

Exemple

Exemplul 1: Inversarea unui text și verificare palindrom

#include <algorithm>
#include <print>
#include <string>

int main() {
    for (std::string cuvant : {"capac", "mere"}) {
        std::string invers = cuvant;
        std::reverse(invers.begin(), invers.end());
        std::println("{} -> {}, palindrom: {}", cuvant, invers, cuvant == invers);
    }
}

Rezultat

capac -> capac, palindrom: true
mere -> erem, palindrom: false

Exemplul 2: Doar o parte din vector

#include <algorithm>
#include <print>
#include <vector>

int main() {
    std::vector<int> v{1, 2, 3, 4, 5, 6};

    std::reverse(v.begin() + 2, v.end());
    std::println("{}", v);

    std::ranges::reverse(v);
    std::println("{}", v);
}

Rezultat

[1, 2, 6, 5, 4, 3]
[3, 4, 5, 6, 2, 1]

Greșeli frecvente

  • Inversezi un std::string cu diacritice și obții caractere stricate. Literele ca „ș” ocupă 2 octeți în UTF-8, iar reverse le inversează și octeții.

Comenzi înrudite

  • std::views::reverse: Creează o vedere care parcurge un range de la ultimul element la primul, fără să-l modifice.
  • std::rotate: Rotește elementele astfel încât middle devine primul element, iar cele dinaintea lui trec la final.
  • std::swap_ranges: Schimbă între ele elementele a două intervale de aceeași lungime, poziție cu poziție.