从 T* 指针构造一个 std::vector<T>?

Constructing a std::vector<T> from a T* pointer?

本文关键字:std vector 一个 lt gt 指针      更新时间:2023-10-16

我尝试在谷歌上搜索答案,但我想知道是否可以从T*指针构建std::vector<T>

我查看了 API 文档,看起来从给定的构造函数中不可能实现,C++11 data()用于容器的分配。

我问,因为我有一个返回int*的内存映射文件,重用一个广泛使用std::vector<T>的类会很棒

我正在寻找这样的东西:

const size_t n = ...
int* map = mmap(....);
std::vector<int> vec(map, n);
std::vector就是

管理它的缓冲区。 当项目被推入容器时,它可能会删除并重新分配新的缓冲区。 对于std::vector来说,控制现有向量是没有意义的,因为它最终可能会尝试删除和重新分配。

如果需要,可以为使用 mmap 的向量编写自定义分配器,但不能使向量控制现有缓冲区。

如果你去掉内存管理的要求,vector 的接口非常简单,在 mmap'ed 缓冲区周围编写一个兼容的包装器并不需要太多。