std:: array
Defined in header
<array>
|
||
template
<
class
T,
|
(since C++11) | |
std::array
is a container that encapsulates fixed size arrays.
This container is an aggregate type with the same semantics as a struct holding a
C-style array
T
[
N
]
as its only non-static data member. Unlike a C-style array, it doesn't decay to
T
*
automatically. As an aggregate type, it can be initialized with
aggregate-initialization
given at most
N
initializers that are convertible to
T
:
std
::
array
<
int
,
3
>
a
=
{
1
,
2
,
3
}
;
.
The struct combines the performance and accessibility of a C-style array with the benefits of a standard container, such as knowing its own size, supporting assignment, random access iterators, etc.
std::array
satisfies the requirements of
Container
and
ReversibleContainer
except that default-constructed array is not empty and that the complexity of swapping is linear,
satisfies the requirements of
ContiguousContainer
,
(since C++17)
and partially satisfies the requirements of
SequenceContainer
.
There is a special case for a zero-length array (
N == 0
). In that case,
array.
begin
(
)
==
array.
end
(
)
, which is some unique value. The effect of calling
front
(
)
or
back
(
)
on a zero-sized array is undefined.
An array can also be used as a tuple of
N
elements of the same type.
Iterator invalidation
As a rule, iterators to an array are never invalidated throughout the lifetime of the array. One should take note, however, that during swap , the iterator will continue to point to the same array element, and will thus change its value.
Template parameters
T | - | element type Must be MoveConstructible and MoveAssignable . |
N | - | the number of elements in the array or 0 . |
This section is incomplete
Reason: Complete the descriptions of template parameters. |
Member types
Member type | Definition | ||||||
value_type
|
T
|
||||||
size_type
|
std::size_t | ||||||
difference_type
|
std::ptrdiff_t | ||||||
reference
|
value_type & | ||||||
const_reference
|
const value_type & | ||||||
pointer
|
value_type * | ||||||
const_pointer
|
const value_type * | ||||||
iterator
|
|
||||||
const_iterator
|
|
||||||
reverse_iterator
|
std:: reverse_iterator < iterator > | ||||||
const_reverse_iterator
|
std:: reverse_iterator < const_iterator > |
Member functions
Implicitly-defined member functions |
|
(constructor)
(implicitly declared)
|
initializes the array following the rules of
aggregate initialization
(note that default initialization may result in indeterminate values for non-class
T
)
(public member function) |
(destructor)
(implicitly declared)
|
destroys every element of the array
(public member function) |
operator=
(implicitly declared)
|
overwrites every element of the array with the corresponding element of another array
(public member function) |
Element access |
|
access specified element with bounds checking
(public member function) |
|
access specified element
(public member function) |
|
access the first element
(public member function) |
|
access the last element
(public member function) |
|
direct access to the underlying contiguous storage
(public member function) |
|
Iterators |
|
returns an iterator to the beginning
(public member function) |
|
returns an iterator to the end
(public member function) |
|
returns a reverse iterator to the beginning
(public member function) |
|
returns a reverse iterator to the end
(public member function) |
|
Capacity |
|
checks whether the container is empty
(public member function) |
|
returns the number of elements
(public member function) |
|
returns the maximum possible number of elements
(public member function) |
|
Operations |
|
fill the container with specified value
(public member function) |
|
swaps the contents
(public member function) |
Non-member functions
(C++11)
(C++11)
(removed in C++20)
(C++11)
(removed in C++20)
(C++11)
(removed in C++20)
(C++11)
(removed in C++20)
(C++11)
(removed in C++20)
(C++20)
|
lexicographically compares the values of two
array
s
(function template) |
(C++11)
|
accesses an element of an
array
(function template) |
(C++11)
|
specializes the
std::swap
algorithm
(function template) |
(C++20)
|
creates a
std::array
object from a built-in array
(function template) |
Helper classes
(C++11)
|
obtains the size of an
array
(class template specialization) |
(C++11)
|
obtains the type of the elements of
array
(class template specialization) |
Deduction guides |
(since C++17) |
Example
#include <algorithm> #include <array> #include <iostream> #include <iterator> #include <string> int main() { // Construction uses aggregate initialization std::array<int, 3> a1{{1, 2, 3}}; // Double-braces required in C++11 prior to // the CWG 1270 revision (not needed in C++11 // after the revision and in C++14 and beyond) std::array<int, 3> a2 = {1, 2, 3}; // Double braces never required after = // Container operations are supported std::sort(a1.begin(), a1.end()); std::ranges::reverse_copy(a2, std::ostream_iterator<int>(std::cout, " ")); std::cout << '\n'; // Ranged for loop is supported std::array<std::string, 2> a3{"E", "\u018E"}; for (const auto& s : a3) std::cout << s << ' '; std::cout << '\n'; // Deduction guide for array creation (since C++17) [[maybe_unused]] std::array a4{3.0, 1.0, 4.0}; // std::array<double, 3> // Behavior of unspecified elements is the same as with built-in arrays [[maybe_unused]] std::array<int, 2> a5; // No list init, a5[0] and a5[1] // are default initialized [[maybe_unused]] std::array<int, 2> a6{}; // List init, both elements are value // initialized, a6[0] = a6[1] = 0 [[maybe_unused]] std::array<int, 2> a7{1}; // List init, unspecified element is value // initialized, a7[0] = 1, a7[1] = 0 }
Output:
3 2 1 E Ǝ
See also
(C++26)
|
dynamically-resizable, fixed capacity, inplace contiguous array
(class template) |
dynamic contiguous array
(class template) |
|
double-ended queue
(class template) |
|
(library fundamentals TS v2)
|
creates a
std::array
object whose size and optionally element type are deduced from the arguments
(function template) |