Sdílet prostřednictvím


view_interface class (standardní knihovna jazyka C++)

Základní třída pro třídy zobrazení v std::ranges oboru názvů. Tato třída implementuje některé rozhraní pro odvozené typy zobrazení. Tuto možnost použijte jako základní třídu pro vlastní typy zobrazení, abyste snížili využitelnou vrstvu, kterou potřebujete napsat.

Syntaxe

template<class Derived>
  requires std::is_class_v<Derived> && 
  std::same_as<Derived, std::remove_cv_t<Derived>>
class view_interface;

Parametry šablony

Derived
Typ třídy, která je odvozena z této základní třídy.

Členové

Členské funkce Popis
backC++20 Získejte poslední prvek v odvozené zobrazení.
dataC++20 Získejte ukazatel na první prvek v odvozené zobrazení.
emptyC++20 Otestujte, zda je odvozené zobrazení prázdné.
frontC++20 Získejte první prvek v odvozené zobrazení.
sizeC++20 Získá počet prvků v odvozené zobrazení.
Operátory Popis
operator[]C++20 Získejte prvek na zadané pozici.
operator boolC++20 Otestujte, jestli odvozené zobrazení není prázdné.

Požadavky

Hlavička: <ranges> (od C++20)

Obor názvů: std::ranges

Je vyžadována možnost kompilátoru: /std:c++20 nebo novější.

back

Získejte poslední prvek v odvozené zobrazení.

constexpr auto back()
    requires ranges::bidirectional_range<Derived> &&
    ranges::common_range<Derived>;

constexpr auto back() const
    requires ranges::bidirectional_range<const Derived> && 
    ranges::common_range<const Derived>;

Parametry

Žádná

Vrácená hodnota

Poslední prvek v odvozené zobrazení.

Poznámky

Odvozené zobrazení musí splňovat bidirectional_range a common_range.
back() Chování a front() není definováno pro jakékoli prázdné zobrazení.

data

Získejte ukazatel na první prvek v odvozené zobrazení.

constexpr auto data()
    requires std::contiguous_iterator<ranges::iterator_t<Derived>>;
constexpr auto data() const
    requires ranges::range<const Derived> &&
    std::contiguous_iterator<ranges::iterator_t<const Derived>>;

Parametry

Žádná

Vrácená hodnota

Ukazatel na první prvek v odvozené zobrazení.

Poznámky

Iterátor pro odvozené zobrazení musí splňovat contiguous_iterator.

empty

Otestujte, zda je odvozené zobrazení prázdné.

1) constexpr bool empty() requires ranges::forward_range<Derived>;
2) constexpr bool empty() const requires ranges::forward_range<const Derived>;

Parametry

Žádná

Vrácená hodnota

Vrátí true , pokud odvozené zobrazení neobsahuje žádné prvky. V opačném případě vrátí hodnotu false.

Poznámky

Odvozené zobrazení musí splňovat std::ranges::forward_range.

front

Získejte první prvek v odvozené zobrazení.

constexpr auto front()
    requires ranges::forward_range<Derived>;
constexpr auto front() const
    requires ranges::forward_range<const Derived>;

Parametry

Žádná

Vrácená hodnota

Poslední prvek v odvozené zobrazení.

Poznámky

Odvozené zobrazení musí splňovat forward_range.
Chování front() není definováno pro std::ranges::empty_view.

size

Získá počet prvků v odvozené zobrazení.

constexpr auto size() requires ranges::forward_range<Derived> &&
    std::sized_sentinel_for<ranges::sentinel_t<Derived>,
    ranges::iterator_t<Derived>>;
constexpr auto size() const requires ranges::forward_range<const Derived> &&
    std::sized_sentinel_for<ranges::sentinel_t<const Derived>,
    ranges::iterator_t<const Derived>>;

Parametry

Žádná

Vrácená hodnota

Počet prvků v odvozené zobrazení.

Poznámky

Iterátor pro odvozené zobrazení musí splňovat sized_sentinel_for.

operator[]

Získejte prvek na zadané pozici.

template<ranges::random_access_range R = Derived>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos);

template<ranges::random_access_range R = const Derived>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos) const;

Parametry

pos
Pozice vzhledem k počáteční iterátoru prvku, který se má vrátit.

Vrácená hodnota

Prvek na zadané pozici vzhledem k počáteční iterátoru.

Poznámky

Odvozené zobrazení musí splňovat random_access_range.
Chování tohoto operátoru není definováno pro std::ranges::empty_view.

Příklad: operator[]

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{1, 2, 3, 4, 5};
    std::ranges::drop_view dv = std::views::drop(v, 2);

    for (auto e : dv)
    {
        std::cout << e << ' '; // 3 4 5
    }

    std::cout << "\ndv[1] = " << dv[1];
}
3 4 5
dv[1] = 4

view_interface::operator bool

Otestujte, jestli odvozené zobrazení není prázdné.

explicit constexpr operator bool();
explicit constexpr operator bool() const;

Parametry

Žádná

Vrácená hodnota

Vrátí false , pokud odvozené zobrazení neobsahuje žádné prvky (zobrazení je prázdné). V opačném případě vrátí hodnotu true (zobrazení není prázdné).

Poznámky

Iterátor pro odvozené zobrazení musí splňovat std::ranges::forward_iterator.
Tento operátor je ekvivalentní .!empty() Díky tomu je vhodné psát a if (someRange) {...} testovat, jestli je něco v rozsahu, na kterém se má pracovat.
Chování tohoto operátoru není definováno pro std::ranges::empty_view.

Příklad: operator bool

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{1, 2, 3, 4, 5};
    std::ranges::filter_view fv = std::views::filter(v, [](int e) { return e > 3; });

    bool isNotEmpty = static_cast<bool>(fv);
    std::cout << "Has elements greater than 3: " << std::boolalpha << isNotEmpty << '\n' >>;
}
Has elements greater than 3: true

Viz také

<ranges>
ranges::begin()
ranges::data()
ranges::end()
ranges::empty()
ranges::size()
Zobrazit třídy