1

如何在一个循环中遍历整个二维数组, 例如

我想将对角线元素 push_back 放入缓冲区进行处理:2 到 2、3 到 3、4 到 4 我尝试在两个单独的循环中执行此操作,但之后我无法将它们一起处理。

示例二维数组:

0 1 2 3 4 5 6 
1 * * * * * *
2 * * * * * *
3 * * * * * *
4 * * * * * *
5 * * * * * *
6 * * * * * *

因此,(0,1)到(1,0)的缓冲区将是:网格中的一颗星

(0,2) 到 (2,0) 的缓冲区:两颗星

(0,3) 到 (3,0) 的缓冲区:三颗星

等等...

注意缓冲区是一个字符串。

4

2 回答 2

0

如果要获取所有对角元素,则for循环将如下所示:

for(unsigned int i=0;i<yourArrayWidth;i++)
   yourSum += yourArray[i][i];

如果你想要从左上角到右下角的数字(所以“\”),或者:

for(unsigned int i=0;i<yourArrayWidth;i++)
   yourSum += yourArray[yourArrayWidth-i][i];

如果你想要从右上角到左下角的数字(所以“/”)。

在哪里:

  • yourSum是您在遍历之前初始化的一些缓冲区。
  • yourArrayWidth是数组的宽度。
  • yourArray是您示例中的二维数组,从 [0][0] 开始。
于 2014-03-24T01:01:44.547 回答
0

M对于行和列的数组N,您将有num=N+M-1对角线,每个都可以通过以下方式获得:

int num = N+M-1;
int len = 1;
std::vector<std::string> res;
for (int i=0; i<num; ++i)
{
  int startRow = std::min(i, M-1);
  int startCol = i-startRow;
  int len      = std::min(startRow, N-1-startCol) + 1;
  std::string str(len, '\0');
  for (int j=0; j<len; ++j)
  {
    str[j] = arr[startRow-j][startCol+j];
  }
  res.push_back(str);
}

i=0左上角的“/”对角线,i=N+M-1右下角是对角线。

于 2014-03-24T02:23:14.217 回答