Extracția intervalului de elemente - take_view și take_while_view
take_view
Reprezentarea take_view permite extragerea unui anumit număr de elemente. Pentru a crea această reprezentare, se folosește constructorul std::ranges::take_view, care primește un container și numărul de elemente care trebuie extrase:
#include <iostream>
#include <vector>
#include <ranges>
int main()
{
std::vector<std::string> people { "Tom", "Bob", "Alice", "Sam", "Kate" };
// extragem 3 elemente
auto view = std::ranges::take_view{people, 3};
for (const auto& person : view)
{
std::cout << person << std::endl;
}
}
În acest exemplu, extragem primele trei elemente din containerul people:
auto view = std::ranges::take_view{people, 3};
Ieșirea pe consolă va fi:
Tom
Bob
Alice
Ca alternativă, se poate folosi funcția std::views::take(), care primește numărul de elemente care trebuie extrase:
#include <iostream>
#include <vector>
#include <ranges>
int main()
{
std::vector<std::string> people { "Tom", "Bob", "Alice", "Sam", "Kate" };
// extragem 3 elemente
auto view = people | std::views::take(3);
for (const auto& person : view)
{
std::cout << person << std::endl;
}
}
Pentru a crea reprezentarea, folosim operatorul |, care se aplică la container și funcția std::views::take:
auto view = people | std::views::take(3);
Obținerea elementelor pe baza unui criteriu
Reprezentarea take_while_view permite extragerea tuturor elementelor care satisfac o anumită condiție. Condiția este definită printr-o funcție care primește un element din container și returnează true dacă elementul satisface condiția și false dacă nu.
Pentru a crea această reprezentare, se poate folosi constructorul std::ranges::take_while_view, care primește un container și o funcție de condiție:
#include <iostream>
#include <vector>
#include <ranges>
int main()
{
std::vector<std::string> people { "Tom", "Bob", "Alice", "Sam", "Kate" };
auto condition = [](const std::string& s) { return s.length() == 3; };
auto view = std::ranges::take_while_view{people, condition};
for (const auto& person : view)
{
std::cout << person << std::endl;
}
}
În acest exemplu, condiția este definită printr-o funcție care primește un șir de caractere și returnează true dacă lungimea șirului este de 3 caractere:
auto condition = [](const std::string& s) { return s.length() == 3; };
Astfel, elementele vor fi extrase până când condiția nu mai este îndeplinită. Ieșirea pe consolă va fi:
Tom
Bob
Așadar, elementele vor fi extrase doar până la primul element care nu satisface condiția.
Ca alternativă, pentru a crea reprezentarea, se poate folosi funcția std::views::take_while(), care primește funcția de condiție:
#include <iostream>
#include <vector>
#include <ranges>
int main()
{
std::vector<std::string> people { "Tom", "Bob", "Alice", "Sam", "Kate" };
auto condition = [](const std::string& s) { return s.length() == 3; };
auto view = people | std::views::take_while(condition);
for (const auto& person : view)
{
std::cout << person << std::endl;
}
}
Astfel, pentru a crea reprezentarea, folosim operatorul |, care se aplică la container și funcția std::views::take_while:
auto view = people | std::views::take_while(condition);