将多个二维数组存储在一个变量中[关闭]

Posted

技术标签:

【中文标题】将多个二维数组存储在一个变量中[关闭]【英文标题】:Store multiple 2d arrays in a variable [closed] 【发布时间】:2018-04-14 12:04:48 【问题描述】:

我正在生成一个nxn 对角矩阵,例如如果n=3 生成的矩阵将是

1 0 0
0 1 0
0 0 1

然后我将矩阵旋转n-1 次,例如在上面的情况下它是2

0 0 1
1 0 0
0 1 0

0 1 0
0 0 1
1 0 0

我需要自动生成n-1 变量。将旋转矩阵存储在变量中。打印变量名和其中存储的矩阵,例如输出应该是这样的

a1
0 0 1
1 0 0
0 1 0

a2
0 1 0
0 0 1
1 0 0

有没有办法自动生成变量?我正在使用 c++,我正在学习它。

更新

我使用您所说的逻辑将这些旋转矩阵存储在变量中。现在我已经在mxm对角矩阵中对角打印了这些矩阵m=n*n,例如在我的情况下n=3所以m=9。输出看起来像

1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0
0 0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0 0

但我需要输出应该是这样的

1 0 0  0 0 0  0 0 0
0 1 0  0 0 0  0 0 0
0 0 1  0 0 0  0 0 0

0 0 0  0 0 1  0 0 0
0 0 0  1 0 0  0 0 0
0 0 0  0 1 0  0 0 0

0 0 0  0 0 0  0 1 0
0 0 0  0 0 0  0 0 1
0 0 0  0 0 0  1 0 0

我被 for 循环卡住了。

【问题讨论】:

“我需要自动生成n-1个变量”。听起来你需要std::vector 如何使用std::vector@user. “如何使用 std::vector” - 从阅读the documentation开始 【参考方案1】:

在 C++ 中,矩阵通常使用向量的向量来实现:

vector< vector<int> > myTwoDArray; // this will create an empty maxtrix

要将其初始化为特定大小,您可以这样做:

vector< vector<int> > myTwoDArray(n, vector<int>(n)); 
//this will create a n*n 2D array in which every element is 0

然后修改元素,可以使用[]操作符,例如

myTwoDArray[1][2] = 1; // row 1 col 2 is now 1(if we start counting from 0)

更新

要将 2D 矩阵的数量存储在 n 个变量中,将它们存储在向量中可能更容易组织。也就是说,我们可以简单地应用相同的逻辑来创建 2D 矩阵的向量(或者我们可以将其视为 3D Array)

vector< vector< vector<int> > > store(n,  vector< vector<int> >(n, vector<int>(n))); 

例如,如果n=3,则store[0]store[1]store[2] 将分别保存一个 3*3 矩阵。 要更改每个“变量”的矩阵元素,您可以简单地:

store[0][1][2] = 2; //change row 1, col 2 of the matrix in variable 0 to 2

另一种非常好的和更简单的初始化矩阵的方法是使用 C++11 初始化列表(确保你的编译器支持 C++11):

store[0] =  0,0,1, 1,0,0, 0,1,0 ; //store[0] will be a1 in your example.

更新2 打印出这样的矩阵可能很棘手。试着把它分成不同的部分,这是一种可能的方法:

for(int i=0; i<n; i++)  //There are n main blocks(i.e. n big 3*9 horizontal rows
       for(int j=0; j<n; j++) //In each block, we have n individual rows
           for(int k=0; k<n; k++)  //In each individual row, we have a row from a matrix
               for(int m =0; m<n; m++)  //for the row in the matrix, there are n elements
                   cout << store[i*n+k][j][m]<<" ";
               
               cout << " ";
           
           cout << endl;
       
       if(i!=n-1)
           cout<< endl; //avoid a new line at the very end.
   

【讨论】:

但是如何自动创建n 个向量。在我的情况下,我需要将 n-1 旋转矩阵的数量分配给 n-1 向量的数量并打印它们。 @Praveen kumar 对不起,我不太明白你的问题。您的意思是要将 n-1 个旋转矩阵存储为向量吗?如果是这样,应用相同的逻辑并创建一个 vector>>>. 抱歉我的解释不便……我的问题是“我们可以生成'n'个变量吗?”其中每个变量都应该包含一个二维矩阵。如果是,请告诉我逻辑。 @Praveenkumar 我已经更新了我的答案,如果这是你要问的,请告诉我。 正是 gchen。感谢您的清晰解释,逻辑工作正常。 :)

以上是关于将多个二维数组存储在一个变量中[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

单词之间的二维数组 PHP 变量

如何将数据存储在动态二维数组中,该数组在 C++ 中的另一个结构中也使用的结构中声明

[C语言]数组详解

如何在 C++ 中初始化指向动态二维数组的指针 [关闭]

PHP二维数组转换成一维数组,一个变量多个二维数组转换成一维数组,PHP二维数组(或任意维数组)转换成一维数组的方法汇总,array_reduce(); array_walk_recursive()

python中如何将多个一维数组变成二维数组