Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | ranges‎ | concat view
 
 
Bereichsbibliothek
Range-Adaptoren
 
 
constexpr auto size()
    vorausgesetzt(sized_range<Views> && ...);
(1) (seit C++26)
constexpr auto size() const
    vorausgesetzt(sized_range<const Views> && ...);
(2) (seit C++26)

Gibt die Anzahl der Elemente zurück.

Äquivalent zu 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_ )
       );
.

Inhalt

[bearbeiten] Rückgabewert

Wie oben beschrieben.

[bearbeiten] Komplexität

Konstant.

[bearbeiten] Hinweise

Die Komplexität von concat_view ist konstante Zeit (auch wenn sie in einigen Fällen eine lineare Funktion der Anzahl der verketteten Bereiche ist, die ein statisch bekannter Parameter dieser Ansicht ist), da die Komplexität, wie von den Bereichskonzepten gefordert, formal in Bezug auf die Gesamtzahl der Elemente (die Größe) eines gegebenen Bereichs und nicht auf die statisch bekannten Parameter dieses Bereichs ausgedrückt wird.

[bearbeiten] Beispiel

Die vorläufige Version kann unter Compiler Explorer eingesehen werden.

#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);
}

[bearbeiten] Siehe auch

gibt eine Ganzzahl zurück, die der Größe eines Ranges entspricht
(Customization Point Objekt)[edit]
gibt eine vorzeichenbehaftete Ganzzahl zurück, die der Größe eines Ranges entspricht
(Customization Point Objekt)[edit]