全部
我正在使用 2D vector 将我的结果从函数返回到 main。二维 vector 非常大,函数执行了10K+次,因此我必须使用指针返回它以加快速度。
这是我的代码:
vector<vector<double>>* someFunction()
{
vector<vector<double>> results;
//do something...
return &results;
}
主要是:
int main()
{
// do something
////////// EDIT: vec is a pointer, I missed * at first place
vector<vector<double>>* vec = someFunction(); // vec is empty!
cout<<vec.size(); // size = 0
return;
}
当我在 main 中检查 vec 的值和大小时,发现 vec 的大小为 0。
我可以知道我错了什么吗?
非常感谢。
问候
长
最佳答案
您正在返回一个指向局部变量的指针。当函数范围退出时,这个变量不再存在,留下一个悬空指针。这是未定义的行为。
只返回一个值:
vector<vector<double>> someFunction()
{
vector<vector<double>> results;
//do something...
return results;
}
如果您担心按值(value)返回涉及昂贵的拷贝,请记住这些很可能会通过 return value optimization 被删除。 (RVO),具体命名为返回值优化(NRVO)。即使这没有发生(它是可选的,因此实现可以决定不这样做),在 C++11 中移动语义也会起作用。移动一个 std::vector<double>
。非常便宜。
关于c++ - 在 C++ 中使用指针返回二维 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18102090/