Я бы предложил не использовать подход вектора-вектора по двум причинам:
1) он позволяет получить результирующие данные с зазубринами (то есть любые две строки могут иметь разную длину).Если вы оборачиваете это во внешний интерфейс или вам просто все равно, это может не быть проблемой, но:
2) элементы «матрицы» не будут смежными в памяти,что может повлиять на производительность из-за локальности кэша, перераспределения, использования дополнительной памяти и так далее.Это может не иметь большого влияния, но оно есть.
Вместо этого я бы посоветовал вам сделать следующее:
std::size_t size = 4; // Whatever you prefer.
std::vector<int> matrix( size * size );
Затем вы можете получить доступ к элементу в (x, y), используя следующуюидиома:
int element = matrix[ x + y * size ];
Вектор будет размещать свои элементы в куче, и они будут смежными, что также обеспечит прямоугольность матрицы.Возможно, вы захотите обернуть это в класс, чтобы обеспечить более естественный интерфейс.
Если вы действительно хотите поместить саму «матрицу» в кучу, вы можете сделать это, сделав ее указателем и выделив ее с помощьюnew (или лучше, если вы обернули вектор в свой собственный класс, скажем, под названием Matrix, вместо этого поместите , что в кучу).