Значения двумерного массива C ++ - PullRequest
34 голосов
/ 13 февраля 2011

Я хотел объявить 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 C ++ 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' присваивается значение, которое никогда не используется в функции главный ион ()

* 2 ошибки при компиляции *

Пожалуйста, помогите, как правильно инициализировать 2d массив с моим набором значений.

Ответы [ 5 ]

51 голосов
/ 13 февраля 2011

Примерно так:

int main()
{
    int arr[2][5] =
    {
        {1,8,12,20,25},
        {5,9,13,24,26}
    };
}

Это должно быть включено в ваш учебник по С ++: какой вы используете?

В любом случае, лучше, рассмотрите возможность использования std::vector или какой-нибудь готовойкласс матрицы, например, от Boost.

9 голосов
/ 13 февраля 2011

Правильный способ инициализации многомерного массива в C или C ++ -

int arr[2][5] = {{1,8,12,20,25}, {5,9,13,24,26}};

Вы можете использовать этот же трюк для инициализации даже более многомерных массивов, если хотите.

Кроме того, будьте осторожны в исходном коде - вы пытались использовать смещения с 1 индексом в массиве для его инициализации. Это не компилируется, но если это произойдет, это вызовет проблемы, потому что массивы C индексируются 0!

8 голосов
/ 13 февраля 2011

Просто хочу отметить, что вам не нужно указывать все размеры массива.

Самый левый размер может быть «угадан» компилятором.

#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;
}
5 голосов
/ 13 февраля 2011

int iArray[2][2] = {{1, 2}, {3, 4}};

Думайте о двумерном массиве как о массиве массивов.

0 голосов
/ 13 февраля 2011

Одной из альтернатив является представление вашего 2D-массива в виде 1D-массива.Это может сделать поэтапные операции более эффективными.Вы, вероятно, должны обернуть его в класс, который также будет содержать ширину и высоту.

Другая альтернатива - представить двумерный массив как std::vector<std::vector<int> >.Это позволит вам использовать алгоритмы STL для арифметики массивов, а вектор также позаботится об управлении памятью.

...