take_while_view
class (Standardowa biblioteka C++)
Widok zawierający wiodące elementy zakresu, które pasują do predykatu.
Składnia
template<view V, class Pred> requires
input_range<V> && is_object_v<Pred> &&
indirect_unary_predicate<const Pred, iterator_t<V>>
class take_while_view : public view_interface<take_while_view<V, Pred>>;
Parametry szablonu
Pred
Typ predykatu, który określa elementy wiodące do umieszczenia w widoku.
V
Typ widoku bazowego.
Właściwości widoku
Opis poniższych wpisów można znaleźć w temacie View class characteristics (Wyświetlanie właściwości klas)
Characteristic | opis |
---|---|
Adapter zakresu | views::take_while |
Zakres bazowy | Musi spełniać input_range lub wyższe |
Typ elementu | Taki sam jak zakres bazowy |
Wyświetl kategorię iteratora | Taki sam jak zakres bazowy |
Wielkości | Nie. |
Jest const iterowalne |
Tylko wtedy, gdy zakres bazowy jest const iterowalny, a predykat może pracować z odwołaniami const . |
Wspólny zakres | Nie. |
Pożyczony zakres | Nie. |
Elementy członkowskie
Funkcje składowe | Opis |
---|---|
KonstruktoryC++20 | Skonstruuj widok. |
base C++20 |
Pobierz zakres bazowy. |
begin C++20 |
Pobierz iterator do pierwszego elementu. |
end C++20 |
Pobierz element sentinel na końcu widoku. |
pred C++20 |
Uzyskaj odwołanie do predykatu określającego, które elementy należy wziąć. |
Dziedziczone z view_interface |
Opis |
back C++20 |
Pobierz ostatni element. |
data C++20 |
Pobierz wskaźnik do pierwszego elementu. |
empty C++20 |
Sprawdź, czy widok jest pusty. |
front C++20 |
Pobierz pierwszy element. |
operator[] C++20 |
Pobierz element na określonej pozycji. |
operator bool C++20 |
Sprawdź, czy widok nie jest pusty. |
size |
Pobierz liczbę elementów w widoku. |
Wymagania
Nagłówek: <ranges>
(od C++20)
Przestrzeń nazw: std::ranges
Opcja kompilatora: /std:c++20
lub nowsza jest wymagana.
Konstruktory
Konstruowanie wystąpienia obiektu take_while_view
1) take_while_view() requires
default_initializable<V> &&
default_initializable<Pred> = default;
2) constexpr take_while_view(V base, Pred pred);
Parametry
base
Widok bazowy.
pred
Predykat określający elementy wiodące do umieszczenia w widoku.
Aby uzyskać informacje o typach parametrów szablonu, zobacz Parametry szablonu.
Wartość zwracana
Obiekt take_while_view
.
Uwagi
Najlepszym sposobem utworzenia elementu take_while_view
jest użycie adaptera views::take_while
zakresu. Adaptery zakresów są zamierzonym sposobem tworzenia klas widoków. Typy widoków są widoczne w przypadku utworzenia własnego niestandardowego typu widoku.
1) Przeniesienie konstruuje take_while_view
element z base
widoku i pred
predykatu. Obie base
metody i pred
są przenoszone za pośrednictwem metody std::move()
.
2) Tworzy pusty take_while_view
element . Podstawowy widok i predykat są konstruowane domyślnie.
Przykład: take_while_view
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v{0, 1, 2, 3, -4, 5, 6};
auto twv = std::views::take_while(v, [](int i) {return i >= 0; });
for (auto& e : twv)
{
std::cout << e << ' '; // 0 1 2 3
}
std::cout << '\n';
// Using the '|' operator to create a take_view
for (auto i : v | std::views::take_while([](int i) {return i < 5; }))
{
std::cout << i << ' '; // 0 1 2 3 -4
}
}
0 1 2 3
0 1 2 3 -4
base
Pobiera kopię widoku bazowego.
// Uses a copy constructor to return the underlying view
1) constexpr V base() const& requires std::copy_constructible<V>;
// Uses a move constructor to return the underlying view
2) constexpr V base() &&;
Parametry
Brak.
Zwraca
Kopia widoku bazowego.
begin
Pobierz iterator do pierwszego elementu w widoku.
1) constexpr auto begin() requires (!Simple_view<V>);
2) constexpr auto begin() const requires
range<const V> &&
indirect_unary_predicate<const Pred, iterator_t<const V>>
Parametry
Brak.
Wartość zwracana
Iterator wskazujący pierwszy element w widoku. Zachowanie jest niezdefiniowane, jeśli widok nie ma predykatu.
Uwagi
W przypadku 1 wymóg oznacza, Simple_view
że widok V
i const V
mają te same typy iteracyjne i sentinel.
end
Pobierz element sentinel na końcu widoku.
1) constexpr auto end() requires (!Simple_view<V>);
2) constexpr auto end() const requires
range<const V> &&
indirect_unary_predicate<const Pred, iterator_t<const V>
Parametry
Brak.
Wartość zwracana
Sentinel, który jest zgodny z ostatnim elementem w widoku.
Uwagi
W przypadku 1 wymóg oznacza, Simple_view
że widok V
i const V
mają te same typy iteracyjne i sentinel.
pred
Uzyskaj odwołanie do predykatu użytego do wybrania elementów wiodących w widoku.
constexpr const Pred& pred() const;
Wartość zwracana
Odwołanie do predykatu używanego do wybierania elementów wiodących do umieszczenia w widoku.
Przykład: pred
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v{ 0, 1, 2, 3, -4, 5, 6 };
auto mv = v | std::views::take_while(
[](int i) {return i < 5; });
std::cout << std::boolalpha << mv.pred()(v[6]); // outputs false because v[6] = 6 and 6 is not less than 5 (the predicate)
}