【发布时间】:2020-01-31 22:11:54
【问题描述】:
如何在不复制或迭代所有元素的情况下安全地将std::vector 的内容移动到数组中?
void someFunc(float* arr, std::size_t& size)
{
std::vector<float> vec(5, 1.5f);
// do something with the data
size = vec.size();
arr = vec.data(); // this doesn't work, as at the end of the function the data in std::vector will be deallocated
}
main()
{
float* arr;
std::size_t size{0};
someFunc(arr, size);
// do something with the data
delete [] arr;
}
如何将std::vector 中的数据分配给我的数组,并确保不会在std::vector 上调用解除分配?或者有什么其他想法可以解决这个问题?
【问题讨论】:
-
你的目标是什么?为什么不保留向量并使用它的
.data()? -
@BoboFeugo -- 但是你只需要将
data()传递给顶层的“旧代码”函数,剩下的都是一个数组,旧代码不知道数据是由向量管理。你用过data()吗? -
@BoboFeugo only from a
const vector。从可变向量中,您得到一个指向可变的指针 -
@PaulMcKenzie 或
free(),或delete,或lib_MyBadOlLib_Free() -
@BoboFeugo 你在想
std::string::c_str(),返回值为const。对于非常量向量而言并非如此。
标签: c++ stdvector move-semantics