Ответ 1
С С++ 11 вы можете сделать это легко с помощью векторов (для улучшения удобочитаемости строки):
std::vector< std::vector <int > > arr = {
{1,2,3},
{4,5},
{6,7,8,9,0}
};
Если у вас нет компилятора С++ 11, он работает точно так же, но вы не сможете их легко инициализировать. Вы можете установить элементы отдельно:
std::vector< std::vector <int > > arr;//vector of vectors. Think of each element as of a "row"
std::vector<int> sub;//a temporary "row"
sub.push_back(1);
sub.push_back(2);
arr.push_back(sub);//Adding a "row" to the vector
sub.clear();//Making another one
sub.push_back(1);
sub.push_back(12);
sub.push_back(54);
arr.push_back(sub);//Adding another "row" to the vector
Или вы можете инициализировать каждую "строку" обычным массивом:
std::vector< std::vector <int > > arr;
static const int arr[] = {1,2,3,4};//A "row" as an ordinary array
vector<int> vec (arr, arr + sizeof(arr) / sizeof(arr[0]) ); //Setting a "Row" as a vector
arr.push_back(vec);//Adding the "row" to the vector of vectors.
Невозможно делать то, что вы хотите, с обычными массивами, поскольку, когда вы создаете array[X][Y]
, он автоматически является матрицей X*Y
Однако вы можете использовать массив указателей:
int * array[3];
//also possible: int ** array = new int*[3]; but don't forget to delete it afterwards.
int sub1[3] = {1,2,3};
int sub2[2] = {1,2};
int sub3[4] = {1,2,3,4};
array[0] = sub1;
array[1] = sub2;
array[2] = sub3;
и элементы доступа с array[X][Y]
. Однако векторное решение намного лучше.