Introduction
Introduced in C++11, std::array
is part of the Standard Template Library (STL) and provides a fixed-size array with several advantages over traditional C-style arrays.
Basics of std::array
Declaration and initialization:
In C++, std::array
is defined in the <array>
header. The syntax for declaring an array is straightforward:
#include <array>
std::array<int, 5> myArray; // Declare an integer array of size 5
Here, int
is the type of elements in the array, and 5
is the size of the array. Unlike C-style arrays, the size of std::array
is part of its type, making it more robust and less error-prone.
Initialization can be done in various ways, similar to other containers in the STL:
std::array<int, 5> myArray = {1, 2, 3, 4, 5}; // Initialize with values.
Accessing Elements:
Elements in a std::array
can be accessed using the subscript operator ([]
) or the at()
member function:
int value1 = myArray[2]; // Access the third element
int value2 = myArray.at(2); // Same as above
Size and Capacity:
Unlike C-style arrays, std::array
retains information about its size, which can be obtained using the size()
member function.
The size()
member function returns the size of the array:
std::size_t arraySize = myArray.size();
Since std::array
has a fixed size, there's no concept of capacity like in dynamic containers such as std::vector
.
Advantages of std::array
Safety and Bound Checking:
One of the primary advantages of std::array
over C-style arrays is that it performs bounds checking. If you attempt to access an element beyond the array's boundaries, a runtime error will occur. This help prevent common error associated with C-style arrays, like buffer overflows.
Iterators:
std::array
supports iterators, allowing you to traverse its elements using a range-based for loop or standard iterator syntax:
for (const auto& element : myArray) {
// Process each element
}
Standard Library Algorithms:
Since std::array
adheres to the STL interface, you can use various algorithms from the `<algorithm> header directly on it. Sorting, searching, and other operations become more convenient:
#include <algorithm>
std::sort(myArray.begin(), myArray.end());
When to Use std::array
- Compile-Time Size: If the size of the array is known at compile time and won't change during runtime,
std::array
is a better choice than C-style arrays. - Safety Requirement: If safety is a concern and you want automatic bound checking,
std::array
provides a safer alternative to C-style arrays. - STL Compatibility: When working with other STL containers and algorithms, using
std::array
ensures consistency and compatibility.
Important functions
size()
Unlike C-style
at():
The at()
member function provides a way to access elements with bounds checking. If the index is out of elements with bounds checking. If the index is out of range, an std::out_of_range
exception is thrown:
try {
int value = myArray.at(6);
} catch (const std::out_of_range& e) {
// Handle out-of-range access
}
fill()
The fill()
member function sets all elements in the array to a specified value.
myArray.fill(0);
front() and back()
These functions provide direct access to the first and last elements of the array, respectively.
int firstElement = myArray.front();
int lastElement = myArray.back();
data()
The data()
member function returns a pointer to the underlying array, allowing interoperability with functions that expect raw arrays.
int* rawPointer = myArray.data();
Iterators
std::array
supports iterators, facilitating traversal through the elements.
for (auto it = myArray.begin(); it != myArray.end(); ++i) {
// Process each element.
}