如何在一个循环中遍历整个2D数组 例如
我想将对角线元素推回到缓冲区来处理:2到2,3到3,4到4 我试过在两个单独的循环中进行,但之后我无法一起处理它们。
示例2D数组:
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):三颗星
依旧......
注意缓冲区是一个字符串。
答案 0 :(得分: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
是示例中的2D数组,从[0] [0]开始。答案 1 :(得分: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
是右下角的对角线。