Săritura elementelor - drop și drop_while
drop_view
Reprezentarea drop_view permite să sărim un anumit număr de elemente. Pentru a crea această reprezentare, se folosește constructorul std::ranges::drop_view, care primește un container și numărul de elemente care trebuie să fie sărite:
#include <iostream>
#include <vector>
#include <ranges>
int main()
{
std::vector<std::string> people { "Tom", "Kate", "Bob", "Alice", "Sam" };
// sărim 2 elemente
auto view = std::ranges::drop_view{people, 2};
for(const auto& person : view)
{
std::cout << person << std::endl;
}
}
În acest exemplu, sărim primele două elemente din containerul people:
auto view = std::ranges::drop_view{people, 2};
Ieșirea pe consolă va fi:
Bob
Alice
Sam
Ca alternativă, se poate folosi funcția std::views::drop(), care primește numărul de elemente care trebuie să fie sărite:
#include <iostream>
#include <vector>
#include <ranges>
int main()
{
std::vector<std::string> people { "Tom", "Kate", "Bob", "Alice", "Sam" };
// sărim 2 elemente
auto view = people | std::views::drop(2);
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::drop:
auto view = people | std::views::drop(2);
Săritura elementelor pe baza unui criteriu
Reprezentarea drop_while_view permite să sărim primele elemente care satisfac un anumit criteriu. Criteriul 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::drop_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::drop_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; };
În acest caz, elementele vor fi sărite până când condiția nu mai este îndeplinită. Ieșirea pe consolă va fi:
Alice
Sam
Kate
Așadar, elementele vor fi sărite până la primul element care nu satisface condiția.
Ca alternativă, pentru a crea reprezentarea, se poate folosi funcția std::views::drop_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::drop_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::drop_while:
auto view = people | std::views::drop_while(condition);