gpt4 book ai didi

c++ - 如何将 std::vector move 到 C++ 中的原始数组中

转载 作者:行者123 更新时间:2023-12-04 23:35:38 24 4
gpt4 key购买 nike

如何 move 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 上调用解除分配?或者也许还有其他想法可以解决这个问题?

最佳答案

你不能。

vector 拥有它的缓冲区。你不能偷它。

您必须单独复制/move 元素,可选择使用辅助算法为您进行迭代( std::copy/std::move )。

(另请注意,由于您的元素类型只是 float ,这里的 move 是一个拷贝。)

(另请注意,此 std::move 算法与 std::move 右值转换不同。)

考虑您是否真的需要这样做。您可以使用 vec.data() 将 vector 的数据视为数组。只要你需要,只要你保持 vector 活着。这肯定比牺牲 RAII 更好吗?

关于c++ - 如何将 std::vector move 到 C++ 中的原始数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58204766/

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