从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中局部变量a和b的地址,当你返回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 ++中的函数返回数组向量[重复]的主要内容,如果未能解决你的问题,请参考以下文章