【发布时间】:2017-11-11 09:02:07
【问题描述】:
给定一个原始元素数组,如何创建一个 std::vector 来获取原始数组的所有权,而无需重新分配和复制?
例如拥有原始数组:
int* elems = new int[33]
如何创建一个大小为33 的std::vector 指向elems?
我确信理论上这是可能的,因为通常std::vector 被实现为一个包含三个指针的结构,一个指向分配内存的开头,一个指向有效元素的结尾,一个指向结尾分配的内存。但是有没有用原始数组初始化std::vector 结构的标准方法?
【问题讨论】:
-
你不能。不要将 new 用于您的“原始数据”,请使用向量。
-
如果您需要
begin或front等常用方法,可以将指向数组的指针存储在unique_ptr<int[]>中,并通过array_view<int>访问数组内容。 -
做相反的事情:让
vector管理内存,并创建一个指向它的指针std::vector<int> v; int* elems = v.data(); -
请停止判断/寻找这样做的原因,如果可以,请回答问题;如果您真的需要理由,那么不能更改返回原始指针的外部库,我需要使用 std 将其集成到现代框架中?
-
通常值得在问题中添加这样的信息,以明确您无法更改原始数组。否则人们只会试图教育你。你可以edit你的问题包含这样的信息。
标签: c++ arrays vector memory-management