我正在生成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循环。
答案 0 :(得分: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变量中存储2D矩阵的数量,将它们存储在矢量中可能更具组织性。也就是说,我们可以简单地应用相同的逻辑来创建2D矩阵的矢量(或者我们可以将其视为3D数组)
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.
<强> UPDATE2 强> 打印出这样的矩阵可能很棘手。试着把它分成不同的部分,这是一种可能的方式:
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.
}