Значения 2D-массива С++
Я хотел объявить 2D-массив и присвоить ему значения без запуска цикла for.
Я думал, что смогу использовать следующую идею
int array[5] = {1,2,3,4,5};
Что отлично подходит для инициализации 2D-массива. Но, видимо, моему компилятору это не нравится.
/*
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;
}
J:\CPP\Grid > bcc32.exe Grid.cpp
Borland С++ 5.5.1 для Win32 Copyright (c) 1993, 2000 Borland
Grid.cpp:
Ошибка E2188 Grid.cpp 11: Синтаксис выражения в функции main()
Ошибка E2188 Grid.cpp 12: Синтаксис выражения в функции main()
Предупреждение W8004 Grid.cpp 14: "arr" назначается значение, которое никогда не используется в функциях ion main()
* 2 ошибки в компиляции *
Пожалуйста, помогите, как правильно инициализировать массив 2d с моим набором значений.
Ответы
Ответ 1
Вот так:
int main()
{
int arr[2][5] =
{
{1,8,12,20,25},
{5,9,13,24,26}
};
}
Это должно быть описано в учебнике С++: какой из них вы используете?
В любом случае, лучше, используйте std::vector
или некоторый готовый матричный класс, например. от Boost.
Ответ 2
Правильный способ инициализации многомерного массива в C или С++ -
int arr[2][5] = {{1,8,12,20,25}, {5,9,13,24,26}};
Вы можете использовать этот же трюк для инициализации даже более массивных массивов, если хотите.
Кроме того, будьте осторожны в своем исходном коде - вы пытались использовать 1-индексированные смещения в массиве для его инициализации. Это не скомпилировалось, но если бы это было сделано, это вызовет проблемы, потому что массивы C имеют 0-индекс!
Ответ 3
Просто хочу указать, что вам не нужно указывать все размеры массива.
Самый левый размер может быть "угадан" компилятором.
#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;
}
Ответ 4
int iArray[2][2] = {{1, 2}, {3, 4}};
Подумайте о двумерном массиве как массиве массивов.
Ответ 5
Один из вариантов - представить ваш 2D-массив как 1D-массив. Это может сделать элементарные операции более эффективными. Вероятно, вы должны перенести его в класс, который также будет содержать ширину и высоту.
Другой альтернативой является представление 2D-массива как std::vector<std::vector<int> >
. Это позволит вам использовать алгоритмы STL для арифметики массива, и вектор также позаботится о вашем управлении памятью.