c++ - 在 C++ 中使用指针返回二维 vector

标签 c++ pointers vector return

全部

我正在使用 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/

相关文章:

c++ - 创建临时客户端证书(包括私钥)

c++ - 如何在 C++ 中启用 Rust 所有权范式

c - 如何在 C 中创建一个新数组但使用相同的变量?

Java/包含多个 '.'运算符的语句

c++ - 重载 std::transform 算法

c++ - const 之前还是 const 之后?

c - 如何在 C 中初始化指向指针结构的指针?

c - 指针和指针指向的对象

loops - 如何以函数式风格迭代二维向量?

javascript - JS - 将二维向量变成曲线?