The C++ standard library array is just a C-style array wrapped inside a class so that it behaves like a normal C++ object instead of a wacky thing that undergoes decay.
template<typename T, size_t N>
class array
{
T elements[N];
};
template<typename T>
class array<T, 0>
{
};
The only weird case is NÂ = 0. You are allowed to create a zero-length std::array, but C++ does not allow zero-length C-style arrays. The zero-length std::array is just an empty class.
Visual Studio and the Windows debugger come with a visualizer:
0:000> dx a
a : { size=5 } [Type: std::array<int,5>]
[<Raw View>] [Type: std::array<int,5>]
[0] : 3 [Type: int]
[1] : 1 [Type: int]
[2] : 4 [Type: int]
[3] : 1 [Type: int]
[4] : 5 [Type: int]
Or you can just dig out the elements yourself.
0:000> ?? a class std::array<int,5> +0x000 _Elems : [5] 0n3 0:000> ?? a._Elems[1] int 0n1
The dt command with the -a option (array) is handy for dumping C-style arrays.
0:000> ?? &a class std::array<int,5> * 0x00000094`bed0f698 +0x000 _Elems : [5] 0n3 0:000> dt -a5 int 0x00000094`bed0f698 [0] @ 00000094`bed0f698 --------------------------------------------- 0n3 [1] @ 00000094`bed0f69c --------------------------------------------- 0n1 [2] @ 00000094`bed0f6a0 --------------------------------------------- 0n4 [3] @ 00000094`bed0f6a4 --------------------------------------------- 0n1 [4] @ 00000094`bed0f6a8 --------------------------------------------- 0n5
The simplicity of the std::array is a nice break from the complexity of std::deque.
0 comments