Значения 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 для арифметики массива, и вектор также позаботится о вашем управлении памятью.