split_view
classe (libreria standard C++)
Suddivide una visualizzazione in intervalli secondari in base a un delimitatore. Il delimitatore può essere un singolo elemento o una visualizzazione di elementi. Il delimitatore non fa parte dell'oggetto risultante split_view
.
Una visualizzazione correlata è la lazy_split_view
classe . Le principali differenze tra split_view
e lazy_split_view
sono:
Visualizza | Può dividere un const intervallo |
tipo di intervallo |
---|---|---|
split_view |
no | Supporta forward_range o versione successiva. |
lazy_split_view |
yes | Supporta input_range o versione successiva. |
Preferisce split_view
perché è più efficiente, a meno che non sia necessario dividere un intervallo che sia const
.
Sintassi
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>>;
Parametri del modello
Pattern
Tipo della vista che specifica la sequenza di delimitatori.
V
Tipo della vista sottostante.
Visualizzare le caratteristiche
Per una descrizione delle voci seguenti, vedere Visualizzare le caratteristiche della classe
Caratteristica | Descrizione |
---|---|
Adattatore di intervallo | views::split |
Intervallo sottostante | Uguale all'intervallo sottostante |
Tipo di elemento | range_reference_t<V> |
Visualizzare la categoria iteratore | Soddisfa forward_range |
Dimensioni | No |
Iterabile const |
No |
Intervallo comune | Solo se l'intervallo sottostante soddisfa common_range |
Intervallo preso in prestito | No |
Membri
Funzioni membro | Descrizione |
---|---|
Costruttori | Costruisci la vista. |
base C++20 |
Ottenere l'intervallo sottostante. |
begin C++20 |
Ottenere un iteratore al primo elemento. |
end C++20 |
Ottenere l'sentinel alla fine della visualizzazione. |
Ereditato da view_interface |
Descrizione |
empty C++20 |
Verificare se la visualizzazione è vuota. |
front C++20 |
Ottenere il primo elemento. |
operator bool C++20 |
Verificare se la visualizzazione non è vuota. |
Requisiti
Intestazione: <ranges>
(da C++20)
Spazio dei nomi: std::ranges
Opzione del compilatore: /std:c++20
o versione successiva è obbligatoria.
Costruttori
Costruire un'istanza di un oggetto 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);
Parametri
e
Singolo elemento che identifica dove dividere la visualizzazione. L'elemento non fa parte della visualizzazione risultante.
base
Visualizzazione sottostante.
pattern
Visualizzazione degli elementi che identificano dove dividere la visualizzazione. La visualizzazione degli elementi non fa parte della visualizzazione risultante.
rg
Intervallo da dividere.
Per informazioni sui tipi di parametri del modello, vedere Parametri del modello.
Valore restituito
split_view
Istanza che contiene uno o più intervalli secondari.
Osservazioni:
Il modo migliore per creare un split_view
oggetto consiste nell'usare l'adattatore views::split
di intervallo. Gli adattatori di intervallo sono il modo previsto per creare classi di visualizzazione. I tipi di visualizzazione vengono esposti solo nel caso in cui si voglia creare un tipo di visualizzazione personalizzato.
1) Creare un split_view
oggetto costruito per impostazione predefinita. La vista sottostante e pattern
sono costruite per impostazione predefinita. base()
restituisce una copia di V()
.
2) Creare un split_view
oggetto suddividendo la vista usando una sequenza di delimitatori.
3) Creare un split_view
oggetto suddividendo la vista usando un singolo delimitatore.
Esempiosplit_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
Ottiene una copia della visualizzazione sottostante.
// 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() &&;
Parametri
Nessuna.
Valori restituiti
Visualizzazione sottostante.
begin
Ottiene un iteratore al primo elemento nella visualizzazione.
constexpr auto begin();
Parametri
Nessuna.
Valore restituito
Iteratore che punta al primo elemento della visualizzazione.
end
Ottenere l'sentinel alla fine della visualizzazione.
constexpr auto end();
Parametri
Nessuna.
Valore restituito
Sentinel che segue l'ultimo elemento nella visualizzazione:
Vedi anche
<ranges>
split_view
adattatore di intervallo
Classe lazy_split_view
classi di visualizzazione