std::views::reverse în C++

Creează o vedere care parcurge un range de la ultimul element la primul, fără să-l modifice.

Sintaxă
auto v = range | std::views::reverse;

Ce face std::views::reverse

std::views::reverse nu are paranteze: se scrie direct v | std::views::reverse. Parcurge elementele în ordine inversă, iar containerul original rămâne neschimbat (spre deosebire de std::reverse).

Merge pe range-uri care se pot parcurge în ambele sensuri: vector, string, list, map, dar nu și pe std::forward_list.

Parametri

Parametru Descriere
range Sursa (bidirecțională).

Ce returnează

Un view inversat.

Exemple

Exemplul 1: Numărătoare inversă

#include <print>
#include <ranges>

int main() {
    for (int i : std::views::iota(1, 6) | std::views::reverse) {
        std::print("{}... ", i);
    }
    std::println("Start!");
}

Rezultat

5... 4... 3... 2... 1... Start!

Exemplul 2: Ultimele mesaje primele

#include <print>
#include <ranges>
#include <string>
#include <vector>

int main() {
    std::vector<std::string> mesaje{"Bună dimineața", "Ai primit factura?", "Da, mulțumesc", "Pe mâine"};

    for (const auto& m : mesaje | std::views::reverse | std::views::take(2)) {
        std::println("{}", m);
    }
    std::println("Primul din vector a rămas: {}", mesaje.front());
}

Rezultat

Pe mâine
Da, mulțumesc
Primul din vector a rămas: Bună dimineața

Greșeli frecvente

  • Scrii std::views::reverse() cu paranteze: nu compilează. Este un adaptor fără argumente.

Comenzi înrudite

  • std::reverse: Inversează pe loc ordinea elementelor dintr-un interval.
  • std::views::take: Creează o vedere cu primele n elemente ale unui range (sau toate, dacă sunt mai puține).
  • std::views::iota: Generează numerele consecutive dintr-un interval (sau la infinit) fără să le stocheze.