Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/container/span/dynamic extent"

From cppreference.com
< cpp‎ | container‎ | span
m (fmt)
m (fmt)
Line 19: Line 19:
  
 
===Example===
 
===Example===
{{example|code=
+
{{example
 +
|code=
 
#include <array>
 
#include <array>
 
#include <cassert>
 
#include <cassert>
Line 39: Line 40:
 
     };
 
     };
  
     int a[]{1,2,3,4,5};
+
     int a[]{1, 2, 3, 4, 5};
  
 
     std::span span1{a};
 
     std::span span1{a};
Line 47: Line 48:
 
     print("span2", span2.extent);
 
     print("span2", span2.extent);
  
     std::array ar{1,2,3,4,5};
+
     std::array ar{1, 2, 3, 4, 5};
 
     std::span span3{ar};
 
     std::span span3{ar};
 
     print("span3", span3.extent);
 
     print("span3", span3.extent);
  
     std::vector v{1,2,3,4,5};
+
     std::vector v{1, 2, 3, 4, 5};
 
     std::span span4{v};
 
     std::span span4{v};
 
     print("span4", span4.extent);
 
     print("span4", span4.extent);

Revision as of 04:38, 5 November 2023

 
 
 
 
Defined in header <span>
inline constexpr std::size_t dynamic_extent = std::numeric_limits<std::size_t>::max();
(since C++20)

std::dynamic_extent is a constant of type std::size_t that is used to differentiate std::span of static and dynamic extent.

Note

Since std::size_t is an unsigned type, an equivalent definition is:

inline constexpr std::size_t dynamic_extent = -1;

See integral conversions.

Example

#include <array>
#include <cassert>
#include <cstddef>
#include <iostream>
#include <span>
#include <string_view>
#include <vector>
 
int main()
{
    auto print = [](std::string_view const name, std::size_t ex)
    {
        std::cout << name << ", ";
        if (std::dynamic_extent == ex)
            std::cout << "dynamic extent\n";
        else
            std::cout << "static extent = " << ex << '\n';
    };
 
    int a[]{1, 2, 3, 4, 5};
 
    std::span span1{a};
    print("span1", span1.extent);
 
    std::span<int, std::dynamic_extent> span2{a};
    print("span2", span2.extent);
 
    std::array ar{1, 2, 3, 4, 5};
    std::span span3{ar};
    print("span3", span3.extent);
 
    std::vector v{1, 2, 3, 4, 5};
    std::span span4{v};
    print("span4", span4.extent);
}

Output:

span1, static extent = 5
span2, dynamic extent
span3, static extent = 5
span4, dynamic extent

See also

(C++20)
a non-owning view over a contiguous sequence of objects
(class template) [edit]