void createArray(int a, int b, int c, int d, int array[3][3]){
int state[3][3];
for(int x=0;x<3;x++){
for(int y=0;y<3;y++){
if(x == a && y == b){
state[x][y] = array[c][d];
}
else if(x == c && y == d){
state[x][y] = array[a][b];
}
else{
state[x][y] = array[x][y];
}
}
}
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
cout << state[i][j] << " ";
}
cout << endl;
}
}
我基本上得到了这个函数,它克隆了输入的多维数组,但是交换了两个坐标(a,b)和(c,d)的值。然后将其输出到控制台。
然而我真正想要的是将它作为一个多维数组返回,但我不认为这可以做到吗?
我已经查看了向量和指针但是并没有真正理解它们,如果我使用它们,那么我将不得不更改我之前编写的所有代码。
答案 0 :(得分:3)
当您想要返回非常规数据类型(int
,char
等)时,最好的方法是制作自己的数据类型。
struct mat3
{
int myArray[3][3];
};
mat3 createArray(int a, int b, int c, int d, int array[3][3]){
mat3 state;
for(int x=0;x<3;x++){
for(int y=0;y<3;y++){
if(x == a && y == b){
state.myArray[x][y] = array[c][d];
}
else if(x == c && y == d){
state.myArray[x][y] = array[a][b];
}
else{
state.myArray[x][y] = array[x][y];
}
}
}
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
cout << state.myArray[i][j] << " ";
}
cout << endl;
return state;
}
}
我已经查看了向量和指针但是并没有真正理解它们,如果我使用它们,那么我将不得不更改我之前编写的所有代码
我建议你进一步研究指针,它们非常重要,你已经在不知情的情况下使用它们了。
答案 1 :(得分:3)
有多种选择。
选项1 - 将数组传递给函数
void createArray(int a, int b, int c, int d, const int array[3][3], int outArray[3][3]){
...
}
选项2 - 返回对数组的引用 - 只需确保数组不存在于它返回的函数的堆栈中。
typedef int My3Times3Array[3][3];
const My3Times3Array& createArray(int a, int b, int c, int d, const int array[3][3]){
...
}
选项3 - 返回包含数组的类
struct Array
{
int array[3][3];
};
...
Array createArray(int a, int b, int c, int d, const int array[3][3]){
...
}
还有std::vector
,std::array
或boost::matrix
,但既然你提到你还不熟悉指针,我会保存模板类供以后使用。
答案 2 :(得分:0)
您可以动态分配二维数组并返回指向它的指针。例如
typedef int ( *STATE )[3];
STATE createArray(int a, int b, int c, int d, int array[3][3]){
STATE state = new int[3][3];
//...
return state;
}
或者
int ( *createArray(int a, int b, int c, int d, int array[3][3] ) )[3]{
int ( * state )[3] = new int[3][3];
//...
return state;
}
事实上,如果你使用矢量,你可以获得相同的结果。例如
#include <vector>
#include <array>
//...
std::vector<std::array<int, 3>> createArray(int a, int b, int c, int d, int array[3][3]){
std::vector<std::array<int, 3>> state( 3 );
//...
return state;
}