二维数组值

问题描述 投票:0回答:5

我想声明一个二维数组并为其赋值,而不运行 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

用于 Win32 的 Borland C++ 5.5.1 版权所有 (c) 1993, 2000 Borland

网格.cpp:

错误 E2188 Grid.cpp 11:函数 main() 中的表达式语法

错误 E2188 Grid.cpp 12:函数 main() 中的表达式语法

警告 W8004 Grid.cpp 14:“arr”被分配了一个从未在 funct 中使用的值 离子主()

* 编译中有 2 个错误 *

请帮忙了解使用我的一组值初始化二维数组的正确方法是什么。

c++ multidimensional-array initialization shortcut
5个回答
67
投票

像这样:

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

这应该包含在你的 C++ 教科书中:你使用的是哪一本?

无论如何,最好考虑使用

std::vector
或一些现成的矩阵类,例如来自Boost。


11
投票

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

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

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

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


9
投票

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

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

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

6
投票

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

将二维数组视为数组的数组。


3
投票

一种替代方法是将 2D 数组表示为 1D 数组。这可以使逐元素操作更加高效。您可能应该将其包装在一个也包含宽度和高度的类中。

另一种替代方法是将 2D 数组表示为

std::vector<std::vector<int> >
。这将让你使用STL的算法进行数组运算,并且向量还将为你处理内存管理。

© www.soinside.com 2019 - 2024. All rights reserved.