std::ranges::views::drop, std::ranges::drop_view
| Défini dans l'en-tête <ranges>
|
||
template< ranges::view V >
class drop_view
: public ranges::view_interface<drop_view<V>>
|
(1) | (depuis C++20) |
namespace views {
inline constexpr /* unspecified */ drop = /* unspecified */;
}
|
(2) | (depuis C++20) |
| Signature d'appel |
||
template< ranges::viewable_range R >
requires /* see below */
constexpr ranges::view auto
drop( R&& r, ranges::range_difference_t<R> count );
|
(depuis C++20) | |
template< class DifferenceType >
constexpr /* range adaptor closure */ drop( DifferenceType&& count );
|
(depuis C++20) | |
T est std::remove_cvref_t<decltype((e))> et D est ranges::range_difference_t<decltype((e))>), l'expression views::drop(e, f) est équivalente en expression à :((void)f,decay-copy(e)), siTest un ranges::empty_view, sauf que les évaluations deeetfsont séquencées de manière indéterminée ;- sinon,
T(ranges::begin(e) + inc, ranges::end(e),/*to-unsigned-like*/(ranges::distance(e) - inc)), siTest une spécialisation deranges::subrangequi modélise à la fois random_access_range et sized_range, etTa besoin de stocker la taille (voir ranges::subrange::subrange() pour plus de détails), oùinceststd::min<D>(ranges::distance(e), f); - sinon,
U(ranges::begin(e) + inc, ranges::end(e)), siTest une spécialisation destd::span, std::basic_string_view,ranges::iota_view, ouranges::subrangequi modélise à la fois random_access_range et sized_range, oùUest
std::span<typename T::element_type>, siTest une spécialisation destd::span;Tsinon ;
|
(depuis C++23) |
- sinon,
drop_view(e, f).
decltype((f)) doit modéliser std::convertible_to<D>.drop_view modélise les concepts contiguous_range, random_access_range, bidirectional_range, forward_range, input_range, common_range et sized_range lorsque la vue sous-jacente V modélise les concepts respectifs.
Membres de données
| Membre | Description |
V base_ (privé)
|
la vue sous-jacente (exposition-only member object*) |
ranges::range_difference_t<V> count_ (privé)
|
le nombre d'éléments à ignorer (exposition-only member object*) |
cache non propagateur<ranges::iterator_t<V>> cache_ (privé) (présent uniquement si V satisfait à forward_rangemais pas random_access_range et sized_range) |
un objet qui met en cache le résultat des appels à begin()(exposition-only member object*) |
Fonctions membres
construit un
drop_view
(fonction membre publique) |
|
|
retourne une copie de la vue sous-jacente (adaptée)
(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 | |
| renvoie 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) |
renvoie un itérateur constant vers le début de la plage (fonction membre publique de std::ranges::view_interface<D>)
|
(C++23) |
renvoie une 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, à condition que ranges::empty lui soit applicable (fonction membre publique de std::ranges::view_interface<D>)
| |
| obtient l'adresse des données de la vue dérivée, à condition que son type d'itérateur satisfasse contiguous_iterator (fonction membre publique de std::ranges::view_interface<D>)
| |
| renvoie 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>)
| |
| renvoie 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>)
| |
renvoie le nième é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
Modèles d'assistance
|
template
<
class
T
>
constexpr
bool
enable_borrowed_range
<
std
::
ranges
::
drop_view
<
T
>>
=
|
(depuis C++20) | |
Cette spécialisation de
ranges::enable_borrowed_range
permet à
drop_view
de satisfaire
borrowed_range
lorsque la vue sous-jacente la satisfait.
Exemple
#include <initializer_list> #include <iostream> #include <ranges> int main() { const auto nums = {1, 2, 3, 4, 5, 6, 7}; std::cout << "drop " << 2 << ": "; for (int i : std::ranges::drop_view{nums, 2}) std::cout << i << ' '; std::cout << '\n'; std::cout << "drop " << 3 << ": "; for (int i : nums | std::views::drop(3)) std::cout << i << ' '; std::cout << '\n'; std::cout << "drop " << 4 << ": "; for (int i : std::views::iota(1, 8) | std::views::drop(4)) std::cout << i << ' '; std::cout << '\n'; // Notez que supprimer plus d'éléments que le nombre total est acceptable : for (int dp : {5, 6, 7, 890, 100500}) { std::cout << "drop " << dp << ": "; for (int i : std::views::iota(1, 8) | std::views::drop(dp)) std::cout << i << ' '; std::cout << '\n'; } }
Sortie :
drop 2: 3 4 5 6 7 drop 3: 4 5 6 7 drop 4: 5 6 7 drop 5: 6 7 drop 6: 7 drop 7: drop 890: drop 100500:
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 3407 | C++20 |
views::drop
échoue parfois à
construire une plage à accès aléatoire dimensionnée |
la construction est ajustée
pour qu'elle soit toujours valide |
| LWG 3494 | C++20 |
drop_view
n'était jamais une
borrowed_range
|
c'est une
borrowed_range
si sa vue sous-jacente l'est
|
Voir aussi
une
view
constituée des éléments d'une autre
view
, ignorant la sous-séquence initiale des éléments jusqu'au premier élément où le prédicat retourne
false
(modèle de classe) (objet adaptateur de gamme) |