gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:54:15 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com