std::ranges::views::zip, std::ranges::zip_view
| Défini dans l'en-tête <ranges>
|
||
template< ranges::input_range... Views >
requires (ranges::view<Views> && ...) && (sizeof...(Views) > 0)
class zip_view
: public ranges::view_interface<zip_view<Views...>>
|
(1) | (depuis C++23) |
namespace views {
inline constexpr /*unspecified*/ zip = /*unspecified*/;
}
|
(2) | (depuis C++23) |
| Signature d'appel |
||
template< ranges::viewable_range... Rs >
requires /* see below */
constexpr ranges::view auto zip( Rs&&... rs );
|
(depuis C++23) | |
zip_view est un adaptateur de range qui prend une ou plusieurs vuess , et produit une vue dont le iième élément est une valeur de type tuple composée des iièmes éléments de toutes les vues. La taille de la vue produite est le minimum des tailles de toutes les vues adaptées.views::zip est un objet point de personnalisation.Lorsqu'il est appelé sans argument, views::zip() est équivalent à une expression à auto(views::empty<std::tuple<>>).
Sinon, views::zip(rs...) est équivalent à une expression à ranges::zip_view<views::all_t<decltype((rs))>...>(rs...).
zip_view modélise toujours input_range, et modélise forward_range, bidirectional_range, random_access_range ou sized_range si tous les types de vue adaptés modélisent le concept correspondant.
zip_view modélise common_range si
sizeof...(Views)est égal à1, et le seul type de vue adapté modélise common_range, ou- au moins un type de vue adapté ne modélise pas bidirectional_range, et chaque type de vue adapté modélise common_range, ou
- chaque type de vue adapté modélise à la fois random_access_range et sized_range.
Objets de point de personnalisation
Le nom
views::zip
désigne un
objet de point de personnalisation
, qui est un
objet fonction
constant d'un type de classe
littéral
semiregular
. Voir
CustomizationPointObject
pour plus de détails.
Membres de données
| Membre | Description |
std::
tuple
<
Views...
>
views_
|
tous les objets de vue adaptés
( membre objet d'exposition uniquement* ) |
Fonctions membres
construit un
zip_view
(fonction membre publique) |
|
|
retourne un itérateur vers le début
(fonction membre publique) |
|
|
retourne un itérateur ou un sentinelle vers la fin
(fonction membre publique) |
|
retourne le nombre d'éléments, fourni uniquement si chaque plage sous-jacente (adaptée) satisfait
sized_range
(fonction membre publique) |
|
Hérité de ranges::view_interface | |
| renvoie si la vue dérivée est vide, fournie uniquement si elle satisfait sized_range ou forward_range (fonction membre publique de std::ranges::view_interface<D>)
| |
(C++23) |
renvoie un itérateur constant vers le début de la plage (fonction membre publique de std::ranges::view_interface<D>)
|
(C++23) |
renvoie un sentinelle pour l'itérateur constant de la plage (fonction membre publique de std::ranges::view_interface<D>)
|
| renvoie si la vue dérivée n'est pas vide, fournie uniquement si ranges::empty lui est applicable (fonction membre publique de std::ranges::view_interface<D>)
| |
| renvoie le premier élément dans la vue dérivée, fournie si elle satisfait forward_range (fonction membre publique de std::ranges::view_interface<D>)
| |
| renvoie le dernier élément dans la vue dérivée, fournie uniquement si elle satisfait bidirectional_range et common_range (fonction membre publique de std::ranges::view_interface<D>)
| |
renvoie le nème élément dans la vue dérivée, fournie uniquement si elle satisfait random_access_range (fonction membre publique de std::ranges::view_interface<D>)
| |
Guides de déduction
Classes imbriquées
|
le type d'itérateur
( classe membre modèle d'exposition uniquement* ) |
|
le type sentinelle utilisé lorsque
zip_view
n'est pas un
common_range
( classe membre modèle d'exposition uniquement* ) |
Modèles d'assistance
|
template
<
class
...
Views
>
constexpr
bool
enable_borrowed_range
<
ranges
::
zip_view
<
Views...
>>
=
|
(depuis C++23) | |
Cette spécialisation de
ranges::enable_borrowed_range
permet à
zip_view
de satisfaire
borrowed_range
lorsque chaque vue sous-jacente la satisfait.
Notes
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_ranges_zip
|
202110L
|
(C++23) |
ranges::zip_view
,
ranges:: zip_transform_view , ranges:: adjacent_view , ranges:: adjacent_transform_view |
Exemple
#include <array> #include <iostream> #include <list> #include <ranges> #include <string> #include <tuple> #include <vector> void print(auto const rem, auto const& range) { for (std::cout << rem; auto const& elem : range) std::cout << elem << ' '; std::cout << '\n'; } int main() { auto x = std::vector{1, 2, 3, 4}; auto y = std::list<std::string>{"α", "β", "γ", "δ", "ε"}; auto z = std::array{'A', 'B', 'C', 'D', 'E', 'F'}; print("Vues sources :", ""); print("x : ", x); print("y : ", y); print("z : ", z); print("\nzip(x,y,z) :", ""); for (std::tuple<int&, std::string&, char&> elem : std::views::zip(x, y, z)) { std::cout << std::get<0>(elem) << ' ' << std::get<1>(elem) << ' ' << std::get<2>(elem) << '\n'; std::get<char&>(elem) += ('a' - 'A'); // modifie l'élément de z } print("\nAprès modification, z : ", z); }
Sortie :
Vues sources : x : 1 2 3 4 y : α β γ δ ε z : A B C D E F zip(x,y,z) : 1 α A 2 β B 3 γ C 4 δ D Après modification, z : a b c d E F
Voir aussi
une
view
constituée des résultats de l'application d'une fonction de transformation aux éléments correspondants des vues adaptées
(modèle de classe) (objet de point de personnalisation) |
|
prend une
view
constituée de valeurs
tuple-like
et un nombre N, et produit une
view
du N
ème
élément de chaque tuple
(modèle de classe) (objet adaptateur de plage) |