Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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. |
baseC++20 |
Ottenere l'intervallo sottostante. |
beginC++20 |
Ottenere un iteratore al primo elemento. |
endC++20 |
Ottenere l'sentinel alla fine della visualizzazione. |
Ereditato da view_interface |
Descrizione |
emptyC++20 |
Verificare se la visualizzazione è vuota. |
frontC++20 |
Ottenere il primo elemento. |
operator boolC++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