it-swarm-ru.tech

Значения двумерного массива C ++

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

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

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

34
Kingkong Jnr

Так:

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

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

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

53
Cheers and hth. - Alf

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

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

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

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

9
templatetypedef

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

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

#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;
}
8
pmg

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

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

5
Avery3R

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

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

0
Dima