微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在函数的输出中配对二维数组和整数?

如何解决如何在函数的输出中配对二维数组和整数?

我正在努力从函数创建多变量输出:我想返回二维数组 sites(16x15) 和整数 N

我试过了:

  1. std::make_tuple here
  2. std:make_pair here

我的问题是我可能不知道如何在函数声明中定义二维数组std::pair ,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,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 风格的数组。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。