split_view
class (standardní knihovna jazyka C++)
Rozdělí zobrazení na podrangely na základě oddělovače. Oddělovač může být jeden prvek nebo zobrazení prvků. Oddělovač není součástí výsledného split_view
znaku .
Související zobrazení je lazy_split_view
třída. Mezi hlavními rozdíly mezi split_view
a lazy_split_view
mezi těmito jednotlivými hodnotami jsou:
Zobrazení | Může rozdělit oblast.const |
typ rozsahu |
---|---|---|
split_view |
ne | Podporuje forward_range nebo vyšší. |
lazy_split_view |
ano | Podporuje input_range nebo vyšší. |
Preferujte split_view
, protože je efektivnější, pokud není nutné rozdělit rozsah, který je const
.
Syntaxe
template<forward_range V, forward_range Pattern>
requires view<V> && view<Pattern> &&
indirectly_comparable<iterator_t<V>, iterator_t<Pattern>, ranges::equal_to>
class split_view : public view_interface<split_view<V, Pattern>>;
Parametry šablony
Pattern
Typ zobrazení, který určuje sekvenci oddělovače.
V
Typ podkladového zobrazení.
Zobrazení charakteristik
Popis následujících položek naleznete v tématu Zobrazení vlastností třídy.
Charakteristika | Popis |
---|---|
Adaptér rozsahu | views::split |
Podkladová oblast | Stejné jako podkladová oblast |
Typ elementu | range_reference_t<V> |
Zobrazit kategorii iterátoru | Uspokojuje forward_range |
Tříděný | No |
Je const -iterable |
No |
Společný rozsah | Pouze v případě, že základní rozsah splňuje požadavky common_range |
Zapůjčený rozsah | No |
Členové
Členské funkce | Popis |
---|---|
Konstruktory | Vytvořte zobrazení. |
base C++20 |
Získejte podkladovou oblast. |
begin C++20 |
Získejte iterátor k prvnímu prvku. |
end C++20 |
Získejte sentinel na konci zobrazení. |
Zděděno z view_interface |
Popis |
empty C++20 |
Otestujte, jestli je zobrazení prázdné. |
front C++20 |
Získejte první prvek. |
operator bool C++20 |
Otestujte, jestli 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ší.
Konstruktory
Vytvoření instance objektu split_view
1) split_view() requires default_initializable<V> && default_initializable<Pattern> = default;
2) constexpr split_view(V base, Pattern pattern);
3) template<input_range R> requires constructible_from<V, views::all_t<R>> &&
constructible_from<Pattern, single_view<range_value_t<R>>>
constexpr split_view(R&& rg, range_value_t<R> e);
Parametry
e
Jeden prvek, který identifikuje, kde se má zobrazení rozdělit. Prvek není součástí výsledného zobrazení.
base
Podkladové zobrazení.
pattern
Zobrazení prvků, které identifikují, kde se má zobrazení rozdělit. Zobrazení prvků není součástí výsledného zobrazení.
rg
Oblast, která se má rozdělit.
Informace o typech parametrů šablony naleznete v tématu Parametry šablony.
Vrácená hodnota
Instance split_view
, která obsahuje jednu nebo více poduspořádek.
Poznámky
Nejlepší způsob, jak vytvořit, split_view
je použití adaptéru rozsahu views::split
. Adaptéry rozsahu představují zamýšlený způsob vytváření tříd zobrazení. Typy zobrazení se zobrazí jenom v případě, že chcete vytvořit vlastní typ zobrazení.
1) Vytvořte vytvořený split_view
výchozí objekt. Podkladové zobrazení a pattern
jsou vytvořené jako výchozí. base()
vrátí kopii .V()
2) Vytvořte split_view
zobrazení rozdělením zobrazení pomocí posloupnosti oddělovačů.
3) Vytvořte split_view
zobrazení rozdělením zobrazení pomocí jednoho oddělovače.
Příklad: split_view
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> rg{ 1, 2, 3, 1, 2, 3, 4, 5, 6 };
// pipe syntax using range adaptor
for (const auto& subrange : rg | std::views::split(3))
{
// outputs
// 1 2
// 1 2
// 4 5 6
for (const auto& elem : subrange)
{
std::cout << elem << ' ';
}
std::cout << '\n';
}
int delimiters[] = {2, 3};
for (auto splitRange : std::views::split(rg, delimiters)) // ctor syntax
{
for (auto& i : splitRange)
{
std::cout << i << " "; // 1 1 4 5 6
}
}
}
1 2
1 2
4 5 6
1 1 4 5 6
base
Získá kopii podkladového zobrazení.
// 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
Žádná
Návraty
Podkladové zobrazení.
begin
Získejte iterátor k prvnímu prvku v zobrazení.
constexpr auto begin();
Parametry
Žádná
Vrácená hodnota
Iterátor ukazující na první prvek v zobrazení.
end
Získejte sentinel na konci zobrazení.
constexpr auto end();
Parametry
Žádná
Vrácená hodnota
Sentinel, který následuje za posledním prvkem v zobrazení:
Viz také
<ranges>
split_view
adaptér rozsahu
Třída lazy_split_view
zobrazit třídy