Ce face std::views::repeat
std::views::repeat (C++23) produce o secvență în care fiecare element este aceeași valoare. Cu al doilea argument se oprește după n repetări; fără el, este infinit și se limitează cu take.
Este util combinat cu zip (o valoare comună pentru fiecare element) sau cu join (de exemplu un text repetat).
Parametri
| Parametru | Descriere |
|---|---|
valoare |
Valoarea repetată. |
n |
Opțional. Numărul de repetări. |
Ce returnează
Un view cu valoarea repetată.
Exemple
Exemplul 1: Repetări simple
#include <print>
#include <ranges>
#include <string>
int main() {
std::println("{}", std::views::repeat(0, 5));
auto linie = std::views::repeat(std::string("-="), 4) | std::views::join | std::ranges::to<std::string>();
std::println("{}", linie);
}
Rezultat
[0, 0, 0, 0, 0]
-=-=-=-=
Exemplul 2: Același oraș pentru fiecare client
#include <print>
#include <ranges>
#include <string>
#include <vector>
int main() {
std::vector<std::string> clienti{"Ana", "Dan", "Ioana"};
for (auto [client, oras] : std::views::zip(clienti, std::views::repeat(std::string("Iași")))) {
std::println("{} - {}", client, oras);
}
}
Rezultat
Ana - Iași
Dan - Iași
Ioana - Iași
Greșeli frecvente
- Parcurgi
repeat(x)fără număr și fărătakesauzip: bucla este infinită.
Comenzi înrudite
std::views::iota: Generează numerele consecutive dintr-un interval (sau la infinit) fără să le stocheze.std::views::zip: Parcurge mai multe range-uri în paralel, oferind la fiecare pas un tuplu cu elementele de pe aceeași poziție.std::views::join: Aplatizează un range de range-uri: parcurge pe rând elementele tuturor sub-range-urilor, ca o singură secvență.std::fill: Atribuie aceeași valoare tuturor elementelor unui interval (fill) sau primelor n elemente (fill_n).