在C++中访问多维数组的整行

Der*_*rek 6 c++ multidimensional-array

如何访问多维数组的整行?例如:

int logic[4][9] = {
    {0,1,8,8,8,8,8,1,1},
    {1,0,1,1,8,8,8,1,1},
    {8,1,0,1,8,8,8,8,1},
    {8,1,1,0,1,1,8,8,1}
};

// I want everything in row 2. So I try...
int temp[9] = logic[2];
Run Code Online (Sandbox Code Playgroud)

我的尝试抛出错误:

数组初始化需要花括号

我知道我可以使用FOR循环检索行,但是我很好奇是否有更明显的解决方案.

And*_*sen 7

这不是数组/指针在C++中的工作方式.

该数组存储在内存中的某个位置.为了引用相同的数据,您需要一个指向数组开头的指针:

int* temp = logic[2];
Run Code Online (Sandbox Code Playgroud)

或者,如果您需要该阵列的副本,则必须分配更多空间.

静态:

int temp[9];
for (int i = 0; i < 9; i++) {
    temp[i] = logic[2][i];
}
Run Code Online (Sandbox Code Playgroud)

动态:

// allocate
int* temp = new int(9);
for (int i = 0; i < 9; i++) {
    temp[i] = logic[2][i];
}

// when you're done with it, deallocate
delete [] temp;
Run Code Online (Sandbox Code Playgroud)

或者因为你正在使用C++,如果你不想担心所有这些内存和指针,那么你应该使用std::vector<int>动态大小的数组和std::array<int>静态大小的数组.

#include <array>
using namespace std;

array<array<int, 9>, 4> logic = {
  {0,1,8,8,8,8,8,1,1},
  {1,0,1,1,8,8,8,1,1},
  {8,1,0,1,8,8,8,8,1},
  {8,1,1,0,1,1,8,8,1}
}};

array<int, 9> temp = logic[2];
Run Code Online (Sandbox Code Playgroud)


use*_*113 5

除了将数组衰减为指针之外,您还可以将其绑定到引用:

int (&temp)[9] = logic[2];
Run Code Online (Sandbox Code Playgroud)

这样做的优点之一是它允许您使用 C++11 基于范围的 for 循环:

for (auto t : temp) {
  // stuff
}
Run Code Online (Sandbox Code Playgroud)