Предполагая, что массив был определен следующим образом:
int a[30][5];
вы могли бы индексировать в него, как это:
a[i][j]
Или определить его как массив с 1 размерности следующим образом:
int a[30*5];
a[j + 5*i];
Вот пример программы, отображающей итерации:
(Обратите внимание, что есть те, кто может сказать, что я переключил строки и столбцы, но это не имеет особого значения, поскольку он повторяется последовательно через массив. То есть, если вы думаете о строках и столбцах по-разному, просто включите все вхождения, и вы должны получить тот же результат.)
int main(int argc, char **argv)
{
int columns = 30;
int rows = 5;
int a[columns*rows]; // not really needed for this example
for(int i = 0; i < columns; ++i)
{
for(int j = 0; j < rows; ++j)
{
cout << "[" << i << "][" << j << "] offset: " << (i*rows + j)
<< endl;
}
}
}
[0][0] offset: 0
[0][1] offset: 1
[0][2] offset: 2
[0][3] offset: 3
[0][4] offset: 4
[1][0] offset: 5
[1][1] offset: 6
[1][2] offset: 7
[1][3] offset: 8
[1][4] offset: 9
[2][0] offset: 10
[2][1] offset: 11
[2][2] offset: 12
[2][3] offset: 13
[2][4] offset: 14
[3][0] offset: 15
[3][1] offset: 16
[3][2] offset: 17
[3][3] offset: 18
...
[27][4] offset: 139
[28][0] offset: 140
[28][1] offset: 141
[28][2] offset: 142
[28][3] offset: 143
[28][4] offset: 144
[29][0] offset: 145
[29][1] offset: 146
[29][2] offset: 147
[29][3] offset: 148
[29][4] offset: 149
И еще одна часть информации, если вам нужно выделить 2D массив динамически, вот how:
int **a = new int*[30];
for(int i = 0; i < 30; ++i)
{
a[i] = new int[5];
}
Что вы пытались? Кроме того, представленный образец кода не имеет для меня никакого смысла. Это не помогает. –
Я обновил образец. В принципе, я хочу вычислить некоторые значения внутри цикла inested for и хранить результаты в массиве 1D от 0 до n. – user1356695
Почему вы начинаете итерировать 'i' в 5? Как вы объявили массив? – jrok