значения двумерного массива c ++

<p>я хотел объявить 2d-массив и присвоить ему значения без запуска цикла for.</p><p>я думал, что мог бы использовать следующую идею</p><pre><code>int array[5] = {1,2,3,4,5}; </code></pre><p>что прекрасно работает для инициализации 2d-массива. но, видимо, моему компилятору это не нравится.</p><pre><code>/* 1 8 12 20 25 5 9 13 24 26 */ #include <iostream.h> int main() { int arr[2][5] = {0}; // this actually initializes everything to 0. arr [1] [] = {1,8,12,20,25}; // line 11 arr [2] [] = {5,9,13,24,26}; return 0; } </code></pre><blockquote> <p>j:\cpp\grid> bcc32.exe grid.cpp</p> <p>borland c++ 5.5.1 для win32 copyright (c) 1993, 2000 borland</p> <p>grid.cpp:</p> <p>ошибка e2188 grid.cpp 11: синтаксис выражения в функции main ()</p> <p>ошибка e2188 grid.cpp 12. синтаксис выражения в функции main ()</p> <p>предупреждение w8004 grid.cpp 14: 'arr' присваивается значение, которое никогда не используется в функции main ()</p> <p><strong>* 2 ошибки в компиляции *</strong></p> </blockquote><p>пожалуйста, помогите, как правильно инициализировать массив 2d с моим набором значений.</p>

<p>так:</p><pre><code>int main() { int arr[2][5] = { {1,8,12,20,25}, {5,9,13,24,26} }; } </code></pre><p>это должно быть включено в ваш учебник по c++: какой из них вы используете?</p><p>в любом случае, лучше подумайте об использовании <code>std::vector</code> или какой-нибудь готовый матричный класс, например от boost.</p>

<p>правильный способ инициализации многомерного массива в c или c++:</p><pre><code>int arr[2][5] = {{1,8,12,20,25}, {5,9,13,24,26}}; </code></pre><p>вы можете использовать этот же трюк для инициализации даже более многомерных массивов, если хотите.</p><p>кроме того, будьте осторожны в исходном коде - вы пытались использовать смещения с 1 индексом в массиве для его инициализации. это не компилируется, но если это произойдет, это вызовет проблемы, потому что массивы c индексируются 0!</p>

<p>просто хочу отметить, что вам не нужно указывать все размеры массива.</p><p>самый левый размер может быть "угадан" компилятором.</p><pre><code>#include <stdio.h> int main(void) { int arr[][5] = {{1,2,3,4,5}, {5,6,7,8,9}, {6,5,4,3,2}}; printf("sizeof arr is %d bytes\n", (int)sizeof arr); printf("number of elements: %d\n", (int)(sizeof arr/sizeof arr[0])); return 0; } </code></pre>

<p><code>int iarray[2][2] = {{1, 2}, {3, 4}};</code></p><p>думайте о двумерном массиве как о массиве массивов.</p>

<p>одна из альтернатив - представить ваш 2d-массив в виде 1d-массива. это может сделать поэтапные операции более эффективными. вы, вероятно, должны обернуть его в класс, который также будет содержать ширину и высоту.</p><p>другой альтернативой является представление двумерного массива в виде <code>std::vector<std::vector<int> ></code>. это позволит вам использовать алгоритмы stl для арифметики массивов, а вектор также позаботится об управлении памятью.</p>