Ce face std::views::join
std::views::join transformă, de exemplu, un vector<vector<int>> într-o secvență plată de int, fără copiere. Pe un vector<string> dă toate caracterele, unul după altul.
Pentru a pune un separator între bucăți există std::views::join_with (C++23), care este opusul lui split.
Parametri
| Parametru | Descriere |
|---|---|
range_de_range |
Un range ale cărui elemente sunt la rândul lor range-uri. |
Ce returnează
Un view plat.
Exemple
Exemplul 1: Toate notele din toate grupele
#include <algorithm>
#include <print>
#include <ranges>
#include <vector>
int main() {
std::vector<std::vector<int>> grupe{{9, 7}, {10, 6, 8}, {5}};
auto toate = grupe | std::views::join;
std::println("{}", toate);
std::println("Note de cel puțin 8: {}", std::ranges::count_if(toate, [](int n) { return n >= 8; }));
}
Rezultat
[9, 7, 10, 6, 8, 5]
Note de cel puțin 8: 3
Exemplul 2: Lipirea cuvintelor (join și join_with)
#include <print>
#include <ranges>
#include <string>
#include <vector>
int main() {
std::vector<std::string> cuvinte{"Ana", "are", "mere"};
auto lipit = cuvinte | std::views::join | std::ranges::to<std::string>();
auto cu_spatii = cuvinte | std::views::join_with(' ') | std::ranges::to<std::string>();
std::println("{}", lipit);
std::println("{}", cu_spatii);
}
Rezultat
Anaaremere
Ana are mere
Greșeli frecvente
- Aplici
joinpe un view care produce containere temporare (de exemplu untransformcare returneazăstd::string) cu un compilator vechi: unele implementări C++20 nu acceptau asta. În C++23 funcționează.
Comenzi înrudite
std::views::split: Împarte un range (de obicei un text) în bucăți, după un separator: un caracter sau o secvență.std::ranges::to: Transformă un range sau un view (filtrat, transformat) într-un container nou: vector, set, string, map.std::views::transform: Creează o vedere în care fiecare element este rezultatul unei funcții aplicate elementului original.