问题描述
我正在努力从函数创建多变量输出:我想返回二维数组 sites(16x15) 和整数 N。
我试过了:
我的问题是我可能不知道如何在函数声明中定义二维数组std::pair
一段名为 function.cpp 的代码:
#include <iostream>
std::pair <int[16][15],int> sites_diamond()
{
int sites[16][15]={0};
int N=0;
for (int r=0; r<7; r++) {
N=N+1+2*r;
for (int c=0; c<(7-r);c++){
sites[r][c]=0;
sites[15-r][c]=0;
sites[r][14-c]=0;
sites[15-r][14-c]=0;
}
}
N=2*(N+15);
return std::make_pair(sites,N);
}
using namespace std;
int main(){
std::pair <int[16][15],int> result = sites_diamond();
cout << " sites \n"<<result.first<< endl;
cout << "number \n"<<result.second<< endl;
return 0;
}
我遇到的错误:
function.cpp: In function ‘std::pair<int [16][15],int> sites_diamond()’:
function.cpp:21:26: error: Could not convert ‘std::make_pair<int (&)[16][15],int&>(sites,N)’ from ‘std::pair<int (*)[15],int>’ to ‘std::pair<int [16][15],int>’
return std::make_pair(sites,N);
提前感谢您的任何建议。 我主要使用 Python,但我想将代码重写为 C++。
解决方法
您可以选择std::array
。它更像 C++,你不需要关心内存分配/释放。
std::pair <std::array<std::array<int,15>,16>,int> sites_diamond()
{
std::array<std::array<int,16> sites;
// ...
return std::make_pair(sites,N);
}
然后用法是:
auto result = sites_diamond();
cout << " sites \n" << result.first.size() << endl;
cout << " number \n" << result.second << endl;
,
由于错误的解释性很强,我只会提出解决方案。使用指针。 像这样定义你的配对:
std::pair<int**,int> result;
当然,在您的函数中,更改您定义站点的方式:
int **sites;
sites = new int*[16];
for (int i = 0;i < 16;i++)
sites[i] = new int[15];
关于
cout << " sites \n"<<result.first<< endl;
我不知道你想在这里打印什么,反正它会打印一些随机地址。
完成后不要忘记delete
这个动态分配的内存。
但总而言之,我只是建议使用诸如向量之类的东西(在这种情况下是二维向量,也是防漏的)来代替 C 风格的数组。