Namespaces
Variants

std::ranges::views:: counted

From cppreference.net
Ranges library
Range adaptors
Défini dans l'en-tête <ranges>
inline constexpr /*unspecified*/ counted = /*unspecified*/ ;
(depuis C++20)
Signature d'appel
template < class Iterator, class DifferenceType >

requires /* voir ci-dessous */

constexpr /*span-or-subrange*/ counted ( Iterator && it, DifferenceType && count ) ;
(depuis C++20)

Une vue comptée présente une view des éléments de l' intervalle compté [ i , n ) pour un itérateur i et un entier non négatif n .

Une plage comptée [ i , n ) représente les n éléments commençant par l'élément pointé par i et allant jusqu'à, mais sans inclure, l'élément pointé par le résultat de n applications de ++ i .

Si n == 0 , la plage comptée est valide et vide. Sinon, la plage comptée n'est valide que si n est positif, i est déréférençable, et [ ++ i , -- n ) est une plage comptée valide.

Formellement, si it et count sont des expressions, T est std:: decay_t < decltype ( ( it ) ) > , et D est std:: iter_difference_t < T > , alors

si T modélise input_or_output_iterator et decltype ( ( count ) ) modélise std:: convertible_to < D > ,
Sinon, views:: counted ( it, count ) est mal formé.

Sommaire

Objets de point de personnalisation

Le nom views::counted 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.

Notes

views::counted ne vérifie pas si la plage est suffisamment longue pour fournir tous les count éléments : utilisez views:: take si cette vérification est nécessaire.

Exemple

#include <iostream>
#include <ranges>
int main()
{
    const int a[]{1, 2, 3, 4, 5, 6, 7};
    for (int i : std::views::counted(a, 3))
        std::cout << i << ' ';
    std::cout << '\n';
    const auto il = {1, 2, 3, 4, 5};
    for (int i : std::views::counted(il.begin() + 1, 3))
        std::cout << i << ' ';
    std::cout << '\n';
}

Sortie :

1 2 3
2 3 4

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é
P2393R1 C++20 la conversion implicite d'un type entier-classe vers std:: size_t pourrait être invalide rendue explicite

Voir aussi

une view composée des N premiers éléments d'une autre view
(modèle de classe) (objet adaptateur de gamme)
combine une paire itérateur-sentinelle en une view
(modèle de classe)
adaptateur d'itérateur qui suit la distance jusqu'à la fin de la gamme
(modèle de classe)
retourne le nombre d'éléments satisfaisant des critères spécifiques
(objet fonction algorithme)