Зависит от того, чего вы хотите достичь. Можно использовать вектор векторов, но вы также можете иметь один уникальный массив / вектор и вычислять индекс, когда хотите получить доступ к элементам с помощью формулы row + row_size * column ... Использование векторов может использовать больше памяти, чем вам нужно, поэтому если Ваша матрица очень большая, это может быть не лучшим решением.
Если вы работаете с числами, вы также можете взглянуть на boost :: uBLAS, который представляет собой матричную библиотеку с множеством возможных политик хранения (матрица за строкой, столбцом, сжатый, треугольный ...) - каждая из матричная модель подходит для конкретной задачи, чтобы иметь наилучшие характеристики или ограничивать выделенную память.
Я думаю, вам следует изучить все возможные способы хранения и выбрать тот, который наилучшим образом соответствует вашей проблеме.