使用C++中的指针返回2D向量

Cha*_*ame 0 c++ pointers return vector

所有

我正在使用2D向量将我的结果从函数返回到main.2D矢量非常大,并且该函数被执行了10K +次,因此我必须使用指针来返回它以加速它.

这是我的代码:

vector<vector<double>>* someFunction()
{
    vector<vector<double>> results;
    //do something...
    return &results;
}
Run Code Online (Sandbox Code Playgroud)

在主要:

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;
}
Run Code Online (Sandbox Code Playgroud)

当我在main中检查vec的值和大小时,结果是vec的大小为0.

我可以知道我错了吗?

提前谢谢了.

问候

jua*_*nza 6

您正在返回指向局部变量的指针.退出函数作用域时,此变量不再存在,使您有一个悬空指针.这是未定义的行为.

只需返回一个值:

vector<vector<double>> someFunction()
{
    vector<vector<double>> results;
    //do something...
    return results;
}
Run Code Online (Sandbox Code Playgroud)

如果您担心按价值返回涉及昂贵的副本,请记住,极有可能通过返回值优化(RVO),特别是返回值优化(NRVO)来省略这些副本.即使这没有发生(它是可选的,所以实现可以决定不这样做),在C++ 11中,移动语义会起作用.移动一个std::vector<double>非常便宜.