Ce face std::views::take
std::views::take(n) se oprește după n elemente. Dacă range-ul are mai puțin de n elemente, le dă pe toate, fără eroare.
Este esențial pentru range-uri infinite, precum std::views::iota(1): fără take, parcurgerea nu s-ar termina niciodată.
Parametri
| Parametru | Descriere |
|---|---|
range |
Sursa. |
n |
Numărul maxim de elemente. |
Ce returnează
Un view cu cel mult n elemente.
Exemple
Exemplul 1: Primele 3 rezultate
#include <print>
#include <ranges>
#include <string>
#include <vector>
int main() {
std::vector<std::string> clasament{"Ana", "Ion", "Maria", "Radu", "Elena"};
for (const auto& nume : clasament | std::views::take(3)) {
std::println("{}", nume);
}
std::println("take(10) pe 5 elemente: {}", (clasament | std::views::take(10)).size());
}
Rezultat
Ana
Ion
Maria
take(10) pe 5 elemente: 5
Exemplul 2: Primele 5 pătrate perfecte impare
#include <print>
#include <ranges>
int main() {
auto rezultat = std::views::iota(1)
| std::views::transform([](int x) { return x * x; })
| std::views::filter([](int x) { return x % 2 == 1; })
| std::views::take(5);
std::println("{}", rezultat);
}
Rezultat
[1, 9, 25, 49, 81]
Greșeli frecvente
- Pui
takeînaintea luifiltercând voiai primele n elemente filtrate. Ordinea în conductă contează:filter | take(5)dă 5 elemente filtrate,take(5) | filterfiltrează doar primele 5.
Comenzi înrudite
std::views::drop: Creează o vedere care sare peste primele n elemente ale unui range.std::views::take_while: Creează o vedere cu elementele de la început, cât timp îndeplinesc o condiție; se oprește la primul care nu o îndeplinește.std::views::iota: Generează numerele consecutive dintr-un interval (sau la infinit) fără să le stocheze.