【问题标题】:2D int array in C++C ++中的二维整数数组
【发布时间】:2011-12-01 17:00:35
【问题描述】:

所以我想非常快地初始化一个 int 二维数组,但我不知道该怎么做。我已经进行了一些搜索,但没有人说如何初始化 2D 数组,除了:

int [SOME_CONSTANT][ANOTHER_CONSTANT] = {{0}};

基本上,我有 8 个顶点,我在一个数组中列出了立方体每个面的 4 个顶点。我试过这个:

int[6][4] sides = {{0, 1, 2, 3}, {4, 5, 6, 7}, {0, 4, 7, 3}, {7, 6, 2, 3}, {5, 1, 2, 6}, {0, 1, 5, 4}};

但这告诉我,'sides' 有一个错误,它需要一个分号。有没有办法像这样快速初始化数组?

谢谢!

【问题讨论】:

    标签: c++ multidimensional-array initialization


    【解决方案1】:
    int sides[6][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}, {0, 4, 7, 3}, {7, 6, 2, 3}, {5, 1, 2, 6}, {0, 1, 5, 4}}; 
    

    我不是普通的 c++ 程序员,但我看起来 int sides[6][4] 似乎可以编译,而 int[6][4] sides 失败。像 C# 这样的语言可以让你在两边都有[][],但显然 c++ 没有。

    【讨论】:

      【解决方案2】:

      我想你是想说

      int sides[6][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}, {0, 4, 7, 3}, {7, 6, 2, 3}, {5, 1, 2, 6}, {0, 1, 5, 4}};
      

      【讨论】:

      • 我以为我尝试过这样做。我想我一定同时遇到了其他问题。谢谢!
      【解决方案3】:

      我会在函数之外创建一个数组,然后将其分配给您的本地。这很可能会调用 memcpy 或只是内联内存复制循环

      这是你能得到的最快速度

      【讨论】:

        【解决方案4】:

        你有 [][] 在错误的一边。试试这个:

        int sides[6][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}, {0, 4, 7, 3}, {7, 6, 2, 3}, {5, 1, 2, 6}, {0, 1, 5, 4}};
        

        请记住,您真正拥有的是:

        int **sides
        

        (指向整数指针的指针)。具有尺寸的是侧面,而不是int。因此,您也可以这样做:

        int x, y[2], z[3][4], ...;
        

        【讨论】:

          【解决方案5】:

          是的,预期的边类型是int[6][4],但 C++ 有时会出现令人困惑的语法。声明该数组的方法是:

          int sides[6][4] = {/*stuff*/};
          

          你也遇到了函数指针,但更糟糕的是:

          int (*myfuncptr)(int); //creates a function pointer called myfuncptr
          

          不过,使用函数指针,您可以这样做:

          typedef int (*func_ptr_type)(int);
          func_ptr_type myfuncptr;
          

          不幸的是,数组没有相应的魔术技巧。

          【讨论】:

            【解决方案6】:

            int sides[6][4] = ... 应该可以解决问题。听起来您可能来自 Java(或其他语言)背景,所以我推荐 C++ 书籍The Definitive C++ Book Guide and List 了解更多详细信息。

            【讨论】:

              【解决方案7】:

              int array[n][m] 的行为类似于 int array[n * m]

              事实上,array[i][j] = array[m * i + j] 代表所有 i, j

              所以int array[2][3] = {1, 2, 3, 4, 5, 6}; 是一个有效的声明,例如,

              array[1][1] = array[3 * 1 + 1] = array[4] = 5.

              【讨论】:

              • 哇,真的吗?这使得将二维数组传递给函数变得容易 100 倍!
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-01-05
              • 1970-01-01
              • 2013-10-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多