从c ++中的函数返回数组向量[重复]

Posted

技术标签:

【中文标题】从c ++中的函数返回数组向量[重复]【英文标题】:returning vector of arrays from function in c++ [duplicate] 【发布时间】:2019-01-10 11:22:42 【问题描述】:

我必须从函数返回向量。我尝试通过返回值并将其作为参考传递。但我得到垃圾值。 下面的程序给出了以下输出。

 **This is the print inside the function**
 1 7 8  
 1 2 3 
 4 5 6 

 **This is the print using the return value /  referenced value outside the function**. 
 1 7 8 
 46980021526656 46980019425190 0 
 1 46980021526656 6

#include <iostream>
#include<vector>
using namespace std;

void process(vector<unsigned long long int*> &vec)

    //vector<unsigned long long int*> vec;
    unsigned long long int a[] =1,2,3;
    unsigned long long int b[] = 4,5,6;
    vec.push_back(a);
    vec.push_back(b);

    for (int i = 0;i < vec.size();i++)
    
        for (int j = 0;j < 3;j++)
        
            cout << vec[i][j] << " ";
        
        cout << "\n";
        
    cout << "\n";

//return vec;


int main() 
// your code goes here
vector<unsigned long long int*> vec;
unsigned long long int c[] =1,7,8;
vec.push_back(c);
process(vec);
for (int i = 0;i < vec.size();i++)

    for (int j = 0;j < 3;j++)
    
        cout << vec[i][j] << " ";
    
    cout << "\n";

cout << "\n";
return 0;

我不知道出了什么问题。我提到了许多堆栈溢出帖子。但我找不到解决办法

请指出我做错了什么。提前致谢

【问题讨论】:

在 vec 中存储本地范围的数组非常糟糕 【参考方案1】:

请指出我做错了什么

你的代码是:

void process(vector<unsigned long long int*> &vec)

    //vector<unsigned long long int*> vec;
    unsigned long long int a[] =1,2,3;
    unsigned long long int b[] = 4,5,6;
    vec.push_back(a);
    vec.push_back(b);

所以process记住vec中局部变量ab的地址,当你返回main 这些局部变量不再存在,它们的内容是未定义/损坏的,所以在 main 你写的是未定义的值

vec.push_back(a);不复制a,只是推送a

的地址

【讨论】:

大声笑我知道,这不是我的代码,这是他的代码,我只是解释他的错误 我猜这个问题是关于正确的做法。单独解释错误本身并不是一个答案。 这个答案是绝对正确的。在愤怒地投票之前,窥视者需要更仔细地阅读。 @MateuszGrzejek 不,问题是字面意思(引用):“请指出我做错了什么” @bruno 那仍然是真的?【参考方案2】:

尝试使用标准库数组:

#include <iostream>
#include <vector>
#include <array>
using namespace std;

void process(vector<array<int, 3>> &vec)

    //vector<unsigned long long int*> vec;
    array<int, 3> a1, 2, 3;
    array<int, 3> b4, 5, 6;
    vec.push_back(a);
    vec.push_back(b);

    for (int i = 0; i < vec.size(); i++)
    
        for (int j = 0; j < 3; j++)
        
            cout << vec[i][j] << " ";
        
        cout << "\n";
    
    cout << "\n";

    //return vec;

int main()

    // your code goes here
    vector<array<int, 3>> vec;
    array<int, 3> c1, 7, 8;
    vec.push_back(c);
    process(vec);
    for (int i = 0; i < vec.size(); i++)
    
        for (int j = 0; j < 3; j++)
        
            cout << vec[i][j] << " ";
        
        cout << "\n";
    
    cout << "\n";
    return 0;

【讨论】:

STL 没有这样的功能。然而,C++ 标准库最近添加了它。 @LightnessRacesinOrbit 现已修复。好吧,自 C++11 以来,它并不是最近的。 2011 是最近的事。

以上是关于从c ++中的函数返回数组向量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 C 中的函数返回多维数组

从 C++ 中的函数返回向量或数组

从函数C++返回3个元素[重复]

从C中的函数返回具有多个可变长度数组的结构

从 C 中的递归函数中枚举并返回从二维数组中的 n 项中选择 k 的所有组合

无法从从 sql 数据库读取的 javascript 函数中获取返回数组 [重复]