二维数组值C ++

时间:2011-02-12 23:03:53

标签: c++ c multidimensional-array initialization shortcut

我想声明一个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&gt; bcc32.exe Grid.cpp

     

Borland C ++ 5.5.1 for Win32版权所有(c)1993,2000 Borland

     

Grid.cpp:

     

错误E2188 Grid.cpp 11:函数main()

中的表达式语法      

错误E2188 Grid.cpp 12:函数main()

中的表达式语法      

警告W8004 Grid.cpp 14:'arr'被赋予一个从未在函数中使用的值   ion main()

     

*编译* * 2错误

请帮助确定使用我的一组值初始化二维数组的正确方法。

5 个答案:

答案 0 :(得分:51)

像这样:

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

这应该由您的C ++教科书涵盖:您使用的是哪一个?

无论如何,更好的是,考虑使用std::vector或一些现成的矩阵类,例如来自Boost。

答案 1 :(得分:9)

在C或C ++中初始化多维数组的正确方法是

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

如果需要,您可以使用相同的技巧初始化更高维的数组。

另外,在初始代码时要小心 - 您试图在数组中使用1索引偏移来初始化它。这没有编译,但如果它确实会导致问题,因为C数组是0索引的!

答案 2 :(得分:8)

只想指出您不需要指定数组的所有维度。

最左边的维度可以由编译器“猜测”。

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

答案 3 :(得分:5)

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

将2D数组视为数组数组。

答案 4 :(得分:0)

另一种方法是将2D数组表示为一维数组。这可以使元素操作更有效。你应该将它包装在一个也包含宽度和高度的类中。

另一种选择是将2D数组表示为std::vector<std::vector<int> >。这将允许您使用STL的算法进行数组运算,并且该向量还将为您处理内存管理。