在一个循环中对角穿过二维数组



如何在一次循环中遍历整个2D数组例如

我想将对角线元素push_back到缓冲区中处理:2到2,3到3,4到4我试过在两个单独的循环中做它,但我不能在之后一起处理它们。

2D数组示例:

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

因此,(0,1)到(1,0)的缓冲区将是:从网格

一个星星

buffer for (0,2) to (2,0): two *

buffer for (0,3) to (3,0): three *

等等…

注意是一个字符串

如果您想获得所有对角元素,则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]开始。

对于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, '');
  for (int j=0; j<len; ++j)
  {
    str[j] = arr[startRow-j][startCol+j];
  }
  res.push_back(str);
}

i=0为左上角的"/"对角线,i=N+M-1为右下角的对角线。

相关内容

  • 没有找到相关文章

最新更新