c++ - 有没有办法将数据从 vector 移动到动态数组?

标签 c++ c++11 stl

我使用 std::vector 在函数中为我进行分配。完成后,我想从中获取纯数据而无需额外复制。数据 ptr 将由另一个类处理,因此我可以放弃 vector ,而不必关心它是否有效。基本上,我想转让 vector 数据的所有权。有办法做到这一点吗?

最佳答案

std::vector 的设计无法转移所有权。但是,您可以通过将其设为 static 并仅使用指向第一个元素的指针来延长 vector 的生命周期:

#include <iostream>
#include <vector>

int* getData()
{
    static std::vector<int> v;
    v.push_back(0);
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    return v.data(); // pointer to first element, equivalent to &v.front() or &v[0]
}

int main()
{
    auto data = getData();
    for ( std::size_t i(0); i < 4; ++i )
    {
        std::cout << data[i] << "\n";
    }
}

演示:http://ideone.com/hsrOeH

因为 vector 是static,所以析构函数不会在作用域末尾调用(即方法getData() 的末尾)。因此,在此范围之外使用 .data() 返回的指针是安全的。

关于c++ - 有没有办法将数据从 vector 移动到动态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22576858/

相关文章:

c++ - 临时数组的元素本身不是右值吗?

c++ - 在 Qt 中建模自修改数据/包装器模型

c++ - 二叉树的列表实现是否可扩展?

c++ - 在 std::map 中排序,其中 key 是 std::string

c++ - 实现接口(interface)的类的析构函数在引用为接口(interface)时未调用

c++ - 类似函数的宏扩展为空

c++ - 花钱买一本关注即将到来的 C++0x 的 C++ 书是否明智?

c++ - std::rethrow_exception 和抛出的异常类型

c++ - 为什么每次使用 std::uniform_int_distribution 时 <random> 库都会产生相同的结果

c++ - 消除类 map 容器和类 vector 容器之间的模板特化