是否有一种方法将数据从矢量移动到动态数组
Is there a way to move data from a vector to a dynamic array?
我使用std::vector
在函数中为我做分配。当我完成后,我想从它得到普通的数据,而不需要额外的复制。数据ptr将由另一个类处理,所以我可以忽略向量,我不必关心它是否有效。基本上,我想转移向量数据的所有权。有办法做到这一点吗?
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
由于向量是static
,在作用域的末尾(即方法getData()
的末尾)不调用析构函数。因此,在此范围之外使用.data()
返回的指针是安全的。
相关文章:
- 移动二维数组中的字符
- 新的整数数组向右移动?
- 当 std::move 与 C 样式数组或不移动对象时会发生什么
- 在数组中输入 n 个整数的列表,并以类似于钟摆来回移动的方式排列它们. 输入-1 3 2 5 4,输出5 3 1 2 4
- 数组指针表示法C++(移动数组时)
- C++ - 块不移动,我的数组不起作用
- 如何将数组中的元素向右移动?
- 如何将不可移动和不可复制的函数返回值获取到数组中
- 尝试通过多个函数移动数组,但遇到了我不知道如何修复的错误
- 移动数组C++中的特定元素
- 在 C++ 中移动数组元素
- C++移动数组元素的正确方法aligned_storage
- 移动数组指针未更改开始的地址
- 使用memcpy移动数组并在给定位置插入一个新元素
- 如何移动数组中的元素,将奇数放到数组的开头(从最小到最大),甚至放到后面(从最大到最小)
- 单独移动数组(raw array, std::array, std::vector)的每个元素
- 向下移动数组值1
- c++中移动数组的函数
- 移动数组中字符串的位置
- 移动数组元素