In fact technically you can store C++ arrays in a vector, and it makes a lot of sense. Not directly, but by a simple workaround, wrapping in a class, will meet exactly all the requirements of a multidimensional array. As the question is already answered by anon. Some explanations steel needed. STL already provides std::array for these purposes.
Is an unpleasant surprise to fall in the trap of not understanding clearly the difference between arrays and pointers, between multidimensional arrays and arrays of arrays, and so on and so on. Vectors of vectors contains vectors as elements. Each element containing a copy of size, capacity and maybe other things, meanwhile the vector datas for elements will be placed in different random places in memory. But a vector of arrays will contain a contiguous segment of memory with all data, which is identical to multidimensional array. Also there is no good reason to keep the size of each array element while it is known to be the same for all elements.
So, making a vector of array, you can't do it directly. But you can workaround it easily by wrapping the array in a class, and in this sample the memory will be identical to the memory of a bidimensional array. This approach is already widely used by many libraries. At low level it will be easily interoperable with APIs that are not C++ vector aware. So without using std::array it will look like this:
int main()
{
struct ss
{
int a[5];
int& operator[] (const int& i) { return a[i]; }
} a{ 1,2,3,4,5 }, b{ 9,8,7,6,5 };
vector<ss> v;
v.resize(10);
v[0] = a;
v[1] = b;
v.push_back(a); // will push to index 10, with reallocation
v.push_back(b); // will push to index 11, with reallocation
auto d = v.data();
// cin >> v[1][3]; //input any element from stdin
cout << "show two element: "<< v[1][2] <<":"<< v[1][3] << endl;
return 0;
}
Since C++11 STL contains std::array for these purposes, so no need to reinvent it:
....
#include<array>
....
int main()
{
vector<array<int, 5>> v;
v.reserve(10);
v.resize(2);
v[0] = array<int, 5> {1, 2, 3, 4, 5};
v[1] = array<int, 5> {9, 8, 7, 6, 5};
v.emplace_back(array<int, 5>{ 7, 2, 53, 4, 5 });
///cin >> v[1][1];
auto d = v.data();
Now look how looks in memory
Now, this is why vectors of vectors is not the answer. Supposing following code
int main()
{
vector<vector<int>> vv = { { 1,2,3,4,5 }, { 9,8,7,6,5 } };
auto dd = vv.data();
return 0;
}
Guess what it looks like in the memory now