如何在函数的输出中对2D数组和整数进行配对



我很难从函数中创建多变量输出:我想返回2D数组站点(16x15(和整数N

我试过了:

  1. std::make_tuple此处
  2. std:make_pair

我的问题是,我可能不知道如何在函数std::pair<int[][],int>正确。

一段名为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, 15>, 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样式的数组。

最新更新