FreeBSD Manual Pages
std::mdspan(3) C++ Standard Libary std::mdspan(3) NAME std::mdspan - std::mdspan Synopsis Defined in header <mdspan> template< class T, class Extents, (since C++23) class LayoutPolicy = std::layout_right, class AccessorPolicy = std::default_accessor<T> > class mdspan; std::mdspan is a view into a contiguous sequence of objects that reinterprets it as a multidimensional array. Each specialization MDS of mdspan models copyable and satisfies: * std::is_nothrow_move_constructible_v<MDS> is true, * std::is_nothrow_move_assignable_v<MDS> is true, and * std::is_nothrow_swappable_v<MDS> is true. A specialization of mdspan is a TriviallyCopyable type if its acces- sor_type, mapping_type and data_handle_type are TriviallyCopyable types. Template parameters T - element type; a complete object type that is nei- ther an abstract class type nor an array type. Extents - specifies number of dimensions, their sizes, and which are known at compile time. Must be a specialization of std::ex- tents. LayoutPolicy - specifies how to convert multidimensional index to underlying 1D index (column-major 3D array, symmetric triangular 2D matrix, etc). specifies how to convert underlying 1D index to a reference to T. AccessorPolicy - Must satisfy the constraint that std::is_same_v<T, typename AccessorPolicy::element_type> is true. This section is incomplete Reason: add the requirement of layout policy and accessor policy. Member types Member type Definition extents_type Extents layout_type LayoutPolicy accessor_type AccessorPolicy mapping_type LayoutPolicy::mapping<Extents> element_type T value_type std::remove_cv_t<T> index_type Extents::index_type size_type Extents::size_type rank_type Extents::rank_type data_handle_type AccessorPolicy::data_handle_type reference AccessorPolicy::reference Member objects Member name Definition acc_ (private) The accessor of type accessor_type (exposition-only member object*) map_ (private) The layout mapping of type mapping_type (exposition-only member object*) ptr_ (private) The underlying data handle of type data_handle_type (exposition-only member object*) Member functions constructor constructs an mdspan (public member function) operator= assigns an mdspan (public member function) Element access operator[] accesses an element at the specified multidi- mensional index (public member function) Observers size returns the size of the multidimensional index space (public member function) empty checks if the size of the index space is zero (public member function) stride obtains the stride along the specified dimen- sion (public member function) extents obtains the extents object (public member function) data_handle obtains the pointer to the underlying 1D se- quence (public member function) mapping obtains the mapping object (public member function) accessor obtains the accessor policy object (public member function) determines if this mdspan's mapping is unique (every is_unique combination of indices maps to a different un- derlying element) (public member function) determines if this mdspan's mapping is exhaus- tive (every is_exhaustive underlying element can be accessed with some combination of indices) (public member function) determines if this mdspan's mapping is strided (in each is_strided dimension, incrementing an index jumps over the same number of underlying elements every time) (public member function) is_always_unique determines if this mdspan's layout mapping is always unique [static] (public static member function) is_always_exhaustive determines if this mdspan's layout mapping is always exhaustive [static] (public static member function) is_always_strided determines if this mdspan's layout mapping is always strided [static] (public static member function) Non-member functions std::swap(std::mdspan) specializes the std::swap algorithm for mdspan (C++23) (function template) Subviews submdspan_extents creates new extents from the existing extents and slice (C++26) specifiers (function template) submdspan returns a view of a subset of an existing mdspan (C++26) (function template) Helper types and templates extents a descriptor of a multidimensional index space of some rank (C++23) (class template) dextents convenience alias template for an all-dy- namic std::extents (C++23) (alias template) layout_right row-major multidimensional array layout mapping policy; (C++23) rightmost extent has stride 1 (class) layout_left column-major multidimensional array layout mapping policy; (C++23) leftmost extent has stride 1 (class) layout_stride a layout mapping policy with user-defined strides (C++23) (class) default_accessor a type for indexed access to elements of mdspan (C++23) (class template) Subviews helpers full_extent a slice specifier tag describing full range of indices in full_extent_t the specified extent (C++26) (tag) strided_slice a slice specifier representing a set of regularly spaced (C++26) indices as indicated by an offset, an ex- tent, and a stride (class template) submdspan_mapping_result a return type of the overloads of sub- mdspan_mapping (C++26) (class template) Deduction guides Notes Feature-test macro Value Std Feature __cpp_lib_mdspan 202207L (C++23) std::mdspan __cpp_lib_submdspan 202306L (C++26) std::submdspan Example Can be previewed on Compiler Explorer. // Run this code #include <cstddef> #include <mdspan> #include <print> #include <vector> int main() { std::vector v{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; // View data as contiguous memory representing 2 rows of 6 ints each auto ms2 = std::mdspan(v.data(), 2, 6); // View the same data as a 3D array 2 x 3 x 2 auto ms3 = std::mdspan(v.data(), 2, 3, 2); // Write data using 2D view for (std::size_t i = 0; i != ms2.extent(0); i++) for (std::size_t j = 0; j != ms2.extent(1); j++) ms2[i, j] = i * 1000 + j; // Read back using 3D view for (std::size_t i = 0; i != ms3.extent(0); i++) { std::println("slice @ i = {}", i); for (std::size_t j = 0; j != ms3.extent(1); j++) { for (std::size_t k = 0; k != ms3.extent(2); k++) std::print("{} ", ms3[i, j, k]); std::println(""); } } } Output: slice @ i = 0 0 1 2 3 4 5 slice @ i = 1 1000 1001 1002 1003 1004 1005 See also span a non-owning view over a contiguous sequence of objects (C++20) (class template) valarray numeric arrays, array masks and array slices (class template) Category: * Todo with reason http://cppreference.com 2024.06.10 std::mdspan(3)
NAME | Synopsis | Template parameters | Member types | Member objects | Member functions | Element access | Observers | Non-member functions | Notes | Example | Output: | See also | Category:
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::mdspan&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>
