C++17Generic ProgrammingLearn C++

Helpers for Generic C++ Code Accessing Container Properties

In addition to Helpers for Generic C++ Code Iterating Over Sequences the C++17 Standard Library provides the following helpers for writing generic code:

Function std::data() provides access to the underlying raw data of:

  • containers that have a member function data();
  • instances of type type std::initializer_list<T>;
  • built-in arrays.

Function std::empty() yields true if either container or an instance of type std::initializer_list<T> is empty. For built-in arrays the returned value is always false because built-int arrays cannot be zero-sized according to the standard.

Function std::size() returns a number of elements of:

  • containers which are provides an iterator interface;
  • built-in arrays.

Please note, that std::size() eliminates the need of use the conservative way to calculate the number of elements of built-in arrays, i.e.:

Finally, please note, that being used with containers these functions just calls the corresponding member functions: data(), empty() and size(). Thus, for instance, std::size() does not work with instances of type std::forward_list<T> since this class doesn’t have the member function size() by design.


Oh hi there 👋
It’s nice to meet you.

Sign up to receive awesome C++ content in your inbox, every day.

We don’t spam! Read our privacy policy for more info.

Related posts
C++C++11C++14C++17C++20Learn C++Syntax

What Is A Forced (Default) Copy Assignment Operator In Modern C++

C++C++11C++14C++17C++20Learn C++Syntax

What is Implicitly-declared Copy Assignment Operator In C++?

C++C++11C++14C++17C++20Learn C++Syntax

What is Avoiding Implicit Copy Assignment In C++?

C++C++11C++14C++17C++20Learn C++

Typical Declaration Of A Copy Assignment Operator Without std::swap