Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
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)

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>

home | help