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 |
---|---|
back C++20 |
Získejte poslední prvek v odvozené zobrazení. |
data C++20 |
Získejte ukazatel na první prvek v odvozené zobrazení. |
empty C++20 |
Otestujte, zda je odvozené zobrazení prázdné. |
front C++20 |
Získejte první prvek v odvozené zobrazení. |
size C++20 |
Získá počet prvků v odvozené zobrazení. |
Operátory | Popis |
operator[] C++20 |
Získejte prvek na zadané pozici. |
operator bool C++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