Namespaces
Variants

std::ranges::concat_view<Views...>:: size

From cppreference.net
Ranges library
Range adaptors
constexpr auto size ( )
requires ( sized_range < Views > && ... ) ;
(1) (depuis C++26)
constexpr auto size ( ) const
requires ( sized_range < const Views > && ... ) ;
(2) (depuis C++26)

Retourne le nombre d'éléments.

Équivalent à return std:: apply
(
[ ] ( auto ... sizes )
{
using CT = ranges:: common_type_t < decltype ( sizes ) ... > ;
return ( make-unsigned-like-t  < CT > ( sizes ) + ... ) ;
} ,
tuple-transform  ( ranges:: size , views_  )
) ;
.

Table des matières

Valeur de retour

Comme décrit ci-dessus.

Complexité

Constante.

Notes

La complexité de concat_view est en temps constant (même si dans certains cas c'est une fonction linéaire du nombre de plages qu'il concatène, qui est un paramètre statiquement connu de cette vue) car la complexité temporelle, telle que requise par les concepts de plages, est formellement exprimée par rapport au nombre total d'éléments (la taille) d'une plage donnée, et non par rapport aux paramètres statiquement connus de cette plage.

Exemple

La version préliminaire peut être consultée sur Compiler Explorer .

#include <cassert>
#include <forward_list>
#include <list>
#include <ranges>
int main()
{
    constexpr static auto a = {1, 2};
    constexpr static auto b = {1, 2, 3};
    constexpr static auto c = {1, 2, 3, 4};
    constexpr auto con{std::views::concat(a, b, c)};
    static_assert(std::ranges::sized_range<decltype(con)>);
    static_assert(con.size() == 2 + 3 + 4);
    std::forward_list d = b;
    static_assert(not std::ranges::sized_range<std::forward_list<int>>);
    const auto cat{std::views::concat(b, c, d)};
    static_assert(not std::ranges::sized_range<decltype(cat)>);
//  auto x = cat.size(); // error: cat is not sized_range because of d
    std::list e = c;
    const auto dog{std::views::concat(a, b, e)};
    static_assert(std::ranges::sized_range<decltype(dog)>);
    assert(dog.size() == 2 + 3 + 4);
}

Voir aussi

retourne un entier égal à la taille d'une plage
(objet point de personnalisation)
retourne un entier signé égal à la taille d'une plage
(objet point de personnalisation)