std::ranges::views::adjacent, std::ranges::adjacent_view, std::ranges::views::pairwise
| Défini dans l'en-tête <ranges>
|
||
template< ranges::forward_range V, std::size_t N >
requires ranges::view<V> && (N > 0)
class adjacent_view
: public ranges::view_interface<adjacent_view<V, N>>
|
(1) | (depuis C++23) |
namespace views {
template< std::size_t N >
constexpr /* unspecified */ adjacent = /* unspecified */ ;
}
|
(2) | (depuis C++23) |
namespace views {
inline constexpr auto pairwise = adjacent<2>;
}
|
(3) | (depuis C++23) |
| Signature d'appel |
||
template< ranges::viewable_range R >
requires /* see below */
constexpr ranges::view auto adjacent<N>( R&& r );
|
(depuis C++23) | |
adjacent_view est un adaptateur de plage qui prend une vue et produit une vue dont le ii-ième élément (une « fenêtre ») est un std::tuple qui contient N références aux éléments [i, i + N - 1] de la vue d'origine.S la taille de la vue d'origine. Alors la taille de la vue produite est :
S - N + 1, siS >= N,0sinon, et la vue résultante est vide.
views::adjacent<N> désigne un RangeAdaptorObject. Étant donné une sous-expression e et une expression constante N, l'expression views::adjacent<N>(e) est équivalente à l'expression
((void)e, auto(views::empty<tuple<>>))siNest égal à0etdecltype((e))modélise forward_range,adjacent_view<views::all_t<decltype((e))>, N>(e)sinon.
views::pairwise désigne un RangeAdaptorObject qui se comporte exactement comme views::adjacent<2>.adjacent_view modélise toujours forward_range, et modélise bidirectional_range, random_access_range ou sized_range si le type de la vue adaptée modélise le concept correspondant.
Membres de données
| Membre | Description |
V
base_
|
la
view
sous-jacente
( objet membre d'exposition uniquement* ) |
Fonctions membres
construit un
adjacent_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 la plage sous-jacente (adaptée) satisfait
sized_range
(fonction membre publique) |
|
|
(C++26)
|
retourne la taille approximative de la
approximately_sized_range
résultante
(fonction membre publique) |
Hérité de ranges::view_interface | |
| retourne si la vue dérivée est vide, à condition qu'elle satisfasse sized_range ou forward_range (fonction membre publique de std::ranges::view_interface<D>)
| |
(C++23) |
retourne un itérateur constant vers le début de la plage (fonction membre publique de std::ranges::view_interface<D>)
|
(C++23) |
retourne un sentinelle pour l'itérateur constant de la plage (fonction membre publique de std::ranges::view_interface<D>)
|
| retourne si la vue dérivée n'est pas vide, à condition que ranges::empty lui soit applicable (fonction membre publique de std::ranges::view_interface<D>)
| |
| retourne le premier élément de la vue dérivée, à condition qu'elle satisfasse forward_range (fonction membre publique de std::ranges::view_interface<D>)
| |
| retourne le dernier élément de la vue dérivée, à condition qu'elle satisfasse bidirectional_range et common_range (fonction membre publique de std::ranges::view_interface<D>)
| |
retourne le nth élément dans la vue dérivée, à condition qu'elle satisfasse random_access_range (fonction membre publique de std::ranges::view_interface<D>)
| |
Guides de déduction
(aucun)
Classes imbriquées
|
le type d'itérateur
( classe membre template* à titre d'exposition uniquement ) |
|
le type sentinelle utilisé lorsque
adjacent_view
n'est pas un
common_range
( classe membre template* à titre d'exposition uniquement ) |
Modèles d'assistance
|
template
<
class
V, size_t N
>
constexpr
bool
ranges::
enable_borrowed_range
<
adjacent_view
<
V, N
>>
=
|
(depuis C++23) | |
Cette spécialisation de
ranges::enable_borrowed_range
permet à
adjacent_view
de satisfaire
borrowed_range
lorsque la vue sous-jacente la satisfait.
Notes
views
::
adjacent
n'accepte que les plages avant même lorsque
N
est
0
.
Il existe des similitudes entre ranges::adjacent_view et ranges::slide_view :
-
Les deux créent une « fenêtre glissante » de taille
N. -
Les deux ont la même taille
S - N + 1, oùSest la taille d'uneviewadaptée telle queS >= N > 0.
Le tableau suivant montre les différences entre ces adaptateurs :
| Adaptateur de vue |
value_type
|
La taille de la fenêtre
N
|
|---|---|---|
| ranges :: adjacent_view | std::tuple | Un paramètre template |
| ranges:: slide_view | ranges:: range | Un argument d'exécution |
| 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 <format> #include <iostream> #include <ranges> #include <tuple> int main() { constexpr std::array v{1, 2, 3, 4, 5, 6}; std::cout << "v = [1 2 3 4 5 6]\n"; for (int i{}; std::tuple t : v | std::views::adjacent<3>) { auto [t0, t1, t2] = t; std::cout << std::format("e = {:<{}}[{} {} {}]\n", "", 2 * i++, t0, t1, t2); } }
Sortie :
v = [1 2 3 4 5 6] e = [1 2 3] e = [2 3 4] e = [3 4 5] e = [4 5 6]
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Applicable à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 4098 | C++23 | views :: adjacent < 0 > acceptait les plages en entrée seule | rejeté |
Références
- Norme C++23 (ISO/CEI 14882:2024) :
-
- 26.7.25 Vue adjacente [range.adjacent]
Voir aussi
une
view
constituée des résultats de l'application d'une fonction de transformation aux éléments adjacents de la vue adaptée
(modèle de classe) (objet adaptateur de gamme) |
|
|
(C++23)
|
une
view
dont le M
ème
élément est une
view
sur les M
ème
à (M + N - 1)
ème
éléments d'une autre
view
(modèle de classe) (objet adaptateur de gamme) |
|
(C++23)
|
une gamme de
view
s
qui sont des segments successifs non chevauchants de taille
N
des éléments d'une autre
view
(modèle de classe) (objet adaptateur de gamme) |
une
view
constituée d'éléments d'une autre
view
, avançant de N éléments à la fois
(modèle de classe) (objet adaptateur de gamme) |