How can I initialize 2d array with a list of 1d arrays?
void main()
{
int a[] = { 1,2,3 };
int b[] = { 4,5,6 };
int array[][3] = { a,b };
}
raw arrays in C++ are kind of second class citizens. They can't be assigned and they can't be copied, which means you can't use them to initialize other arrays, and their name decays into a pointer in most circumstances.
Lucky C++11 offers a solution. std::array
acts like a raw array, but it doesn't have the drawbacks. You can use those instead to build a 2d array like
std::array<int, 3> foo = {1,2,3};
std::array<int, 3> bar = {3,4,5};
std::array<std::array<int, 3>, 2> baz = {foo, bar};
and if you have C++17 support you can leverage class template argument deduction to get rid of having to specify the template parameters and the code simplifies to
std::array foo = {1,2,3};
std::array bar = {3,4,5};
std::array baz = {foo, bar};
which you can see working in this live example
Use std::array
.
auto a = std::array{ 1,2,3 };
auto b = std::array{ 4,5,6 };
auto array = std::array{ a,b };
Demo
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With