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

FreeBSD Manual Pages

  
 
  

home | help
std::data(3)		      C++ Standard Libary		  std::data(3)

NAME
       std::data - std::data

Synopsis
	  Defined in header <array>
	  Defined in header <deque>
	  Defined in header <flat_map>
	  Defined in header <flat_set>
	  Defined in header <forward_list>
	  Defined in header <iterator>
	  Defined in header <list>
	  Defined in header <map>
	  Defined in header <regex>
	  Defined in header <set>
	  Defined in header <span>
	  Defined in header <string>
	  Defined in header <string_view>
	  Defined in header <unordered_map>
	  Defined in header <unordered_set>
	  Defined in header <vector>
	  template< class C >						   (1)
       (since C++17)
	  constexpr auto data( C& c ) -> decltype(c.data());
	  template< class C >						   (2)
       (since C++17)
	  constexpr auto data( const C&	c ) -> decltype(c.data());
	  template< class T, std::size_t N >				   (3)
       (since C++17)
	  constexpr T* data( T (&array)[N] ) noexcept;
	  template< class E >						   (4)
       (since C++17)
	  constexpr const E* data( std::initializer_list<E> il ) noexcept;

	  Returns  a pointer to	the block of memory containing the elements of
       the range.

	  1,2) Returns c.data().
	  3) Returns array.
	  4) Returns il.begin().

Parameters
	  c	- a container or view with a data() member function
	  array	- an array of arbitrary	type
	  il	- an std::initializer_list

Return value
	  1,2) c.data()
	  3) array
	  4) il.begin()

Exceptions
	  1) May throw implementation-defined exceptions.

Notes
	  The overload for std::initializer_list is necessary because it  does
       not have	a
	  member function data.

		   Feature-test	      macro		    Value	   Std
       Feature
	  __cpp_lib_nonmember_container_access	201411L	 (C++17)  std::size(),
       std::data(), and
							       std::empty()

Possible implementation
First version
	  template<class C>
	  constexpr auto data(C& c) -> decltype(c.data())
	  {
	      return c.data();
	  }

Second version
	  template<class C>
	  constexpr auto data(const C& c) -> decltype(c.data())
	  {
	      return c.data();
	  }
				  Third	version
	  template<class T, std::size_t	N>
	  constexpr T* data(T (&array)[N]) noexcept
	  {
	      return array;
	  }
				 Fourth	version
	  template<class E>
	  constexpr const E* data(std::initializer_list<E> il) noexcept
	  {
	      return il.begin();
	  }

Example
       // Run this code

	#include <cstring>
	#include <iostream>
	#include <string>

	int main()
	{
	    std::string	s{"Hello world!\n"};

	    char a[20];	// storage for a C-style string
	    std::strcpy(a, std::data(s));
	//   [s.data(),	s.data() + s.size()] is	guaranteed to be an NTBS since
       C++11

	    std::cout << a;
	}

Output:
	Hello world!

See also
	  ranges::data	obtains	a pointer to the  beginning  of	 a  contiguous
       range
	  (C++20)	(customization point object)
	  ranges::cdata	obtains	a pointer to the beginning of a	read-only con-
       tiguous range
	  (C++20)	(customization point object)

http://cppreference.com		  2024.06.10			  std::data(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::data&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help