Ce face std::views::transform
std::views::transform aplică funcția la fiecare element în momentul parcurgerii, fără să creeze un container nou. Containerul original rămâne neschimbat.
Este echivalentul leneș al lui std::transform. Se combină cu alte view-uri și, dacă ai nevoie de rezultat salvat, cu std::ranges::to.
Parametri
| Parametru | Descriere |
|---|---|
range |
Sursa. |
functie |
Funcția aplicată fiecărui element. |
Ce returnează
Un view cu valorile transformate.
Exemple
Exemplul 1: Pătratele numerelor
#include <print>
#include <ranges>
#include <vector>
int main() {
std::vector<int> v{1, 2, 3, 4, 5};
auto patrate = v | std::views::transform([](int x) { return x * x; });
std::println("{}", patrate);
std::println("Originalul: {}", v);
}
Rezultat
[1, 4, 9, 16, 25]
Originalul: [1, 2, 3, 4, 5]
Exemplul 2: Doar numele dintr-o listă de structuri
#include <print>
#include <ranges>
#include <string>
#include <vector>
struct Angajat {
std::string nume;
int salariu;
};
int main() {
std::vector<Angajat> echipa{{"Ana", 7500}, {"Bogdan", 6200}, {"Carmen", 8100}};
for (const std::string& n : echipa | std::views::transform(&Angajat::nume)) {
std::print("{} ", n);
}
std::println("");
auto cu_bonus = echipa | std::views::transform([](const Angajat& a) { return a.salariu + 500; });
std::println("{}", cu_bonus);
}
Rezultat
Ana Bogdan Carmen
[8000, 6700, 8600]
Greșeli frecvente
- Pui în funcție efecte secundare (afișări, contoare) și te miri că se execută de mai multe ori: funcția este apelată la fiecare acces, iar unele view-uri accesează un element de mai multe ori.
Comenzi înrudite
std::transform: Aplică o funcție fiecărui element și scrie rezultatele în alt interval (sau în același).std::views::filter: Creează o vedere asupra unui container care conține doar elementele ce îndeplinesc o condiție, fără copiere.std::ranges::to: Transformă un range sau un view (filtrat, transformat) într-un container nou: vector, set, string, map.