从 T* 指针构造 std::vector<T>?
Constructing a std::vector<T> from a T* pointer?
我尝试通过谷歌搜索寻找答案,但我想知道是否可以从 T*
指针构建 std::vector<T>
?
我查看了 API 文档,从给定的构造函数看来这是不可能的,C++11 data()
用于容器的分配。
我问是因为我有一个 returns 和 int*
的内存映射文件,重新使用广泛使用 std::vector<T>
的 class 会很棒
我正在寻找这样的东西:
const size_t n = ...
int* map = mmap(....);
std::vector<int> vec(map, n);
std::vector
就是管理它的缓冲区。当项目被推入容器时,它可能会删除并重新分配新的缓冲区。 std::vector
控制现有向量是没有意义的,因为它最终可能会尝试删除和重新分配。
如果需要,您可以为使用 mmap 的向量编写自定义分配器,但不能让向量控制现有缓冲区。
如果去掉内存管理的要求,vector 的接口非常简单,围绕 mmap 缓冲区编写一个兼容的包装器不会花太多时间。
我尝试通过谷歌搜索寻找答案,但我想知道是否可以从 T*
指针构建 std::vector<T>
?
我查看了 API 文档,从给定的构造函数看来这是不可能的,C++11 data()
用于容器的分配。
我问是因为我有一个 returns 和 int*
的内存映射文件,重新使用广泛使用 std::vector<T>
的 class 会很棒
我正在寻找这样的东西:
const size_t n = ...
int* map = mmap(....);
std::vector<int> vec(map, n);
std::vector
就是管理它的缓冲区。当项目被推入容器时,它可能会删除并重新分配新的缓冲区。 std::vector
控制现有向量是没有意义的,因为它最终可能会尝试删除和重新分配。
如果需要,您可以为使用 mmap 的向量编写自定义分配器,但不能让向量控制现有缓冲区。
如果去掉内存管理的要求,vector 的接口非常简单,围绕 mmap 缓冲区编写一个兼容的包装器不会花太多时间。