在 C++ 中返回多维数组
Returning a multidimensional array in C++
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) 的值。然后将其输出到控制台。
但是,我真正想要的是将其作为多维数组返回,但我认为这无法做到?
我已经查看了向量和指针,但并不真正理解它们,如果我使用它们,我将不得不更改我之前编写的所有代码。
有多个选项。
选项 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
,但由于您提到您对指针还不满意,我将保存模板类以备后用。
当你想返回一个非常规的数据类型(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;
}
}
我已经查看了向量和指针,但并不真正理解它们,如果我使用它们,我将不得不更改我以前编写的所有代码
我建议你进一步研究指针,它们是如此重要,以至于你已经在不知情的情况下使用它们。
您可以动态分配二维数组并返回指向它的指针。例如
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;
}
相关文章:
- 为什么 C++ 中的字符数组返回其项目而不是地址?
- C++ bool 数组返回 1 或 0 以外的值
- C++ ostream 从对象数组返回数据
- 类中的重载运算符 [],因此它可以从模板类中的数组返回对象
- 指向对象的指针数组返回jibberish
- 具有基本结构的结构数组返回错误的答案
- 数组返回乐趣 movie_check()
- C++从字符数组返回类型为T的指针
- C++-将数组返回到主函数,并将数组传递给另一个函数
- C++:如何通过异常处理从越界数组返回值
- 整数数组返回类型
- 从字符串流复制到 char * 数组返回为函数参数
- C++函数从对象数组返回对象的副本.这是默认行为吗?
- 8字节数组返回长(C#到C++)
- 向c#数组返回一个字符数组c++
- 从并行数组返回值,并在以后的函数中使用这些值
- 将c++中的浮点数数组返回给Python
- 如何在gsoap中使字符串数组返回值
- 将两个字符相乘并向数组返回int
- C++套接字 - 从结构数组返回单个地址信息