Поскольку вы ищете лучший подход к проектированию, почему бы не последовать совету C ++ FAQ Lite и сделать свой массив плотным (а не рваным).Вы не ожидаете, что вам придется обрабатывать строки разного размера, не так ли?
#include <iostream>
#include <random>
#include <vector>
template<typename T>
class TwoDArray {
std::vector<T> data;
const size_t cols;
public:
TwoDArray(size_t R, size_t C) : data(R*C), cols(C) {}
T operator()(size_t r, size_t c) const { return data[cols*r+c]; }
T& operator()(size_t r, size_t c) { return data[cols*r+c]; }
};
int main()
{
// Make it
const size_t numRows = 10;
const size_t numCols = 10;
TwoDArray<int> Arr2D(numRows, numCols);
// Fill in test data
std::random_device rd;
std::mt19937 eng(rd());
std::uniform_int_distribution<> unif(0,9);
for (size_t i=0; i<numRows; ++i)
for (size_t j=0; j<numCols; ++j)
Arr2D(i,j) = unif(eng);
// Make sure the data is there
for (size_t i = 0; i < numRows; i++) {
for (size_t j = 0; j < numCols; j++) {
std::cout << Arr2D(i,j) << ' ';
}
std::cout << '\n';
}
}
Или вы можете даже сделать размер частью типа, как std::array
.