MySQL Java JavaScript PHP Python HTML-CSS C-sharp C++ Go

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);