gpt4 book ai didi

c++ - 带有自定义分配器的 std::vector 针对 std::vector

转载 作者:行者123 更新时间:2023-12-02 09:55:30 25 4
gpt4 key购买 nike

好吧,我正在使用我自己的分配器来处理具有快速运行时要求的 vector ,以避免调用 new/delete。现在的问题是这样的代码没有编译:

std::vector<char> x(1000);
std::vector<char,myalloc<char>> y(1000);
x = y;

这显然是因为 std::vector 的分配器的实现是编译时的并且改变了类型。但是像上面这样的代码应该是独立于分配器的。

对于 POD,我当然可以做 memcpy,但是还有其他方法吗?我真的很接近实现我自己的 vector ,它将动态使用自定义分配器,在运行时指定并摆脱 std::vector。

最佳答案

But code like the above should be allocator-independent.



分配元素确实应该与分配器无关。但是 copy assignment operatorstd::vector不仅仅是分配元素——它还负责分配器。所以它不应该是独立于分配器的。
std::vector确实提供了一个仅用于分配元素的接口(interface): assign 成员函数。它可以这样使用:
x.assign(y.begin(), y.end());

从 C++17 开始, polymorphic allocators允许分配器感知容器具有类型删除分配器支持,因此您可以始终使用 std::pmr::vector<char> ,但它有一些你需要考虑的问题——类型删除的开销、不同的分配器传播语义、不同的接口(interface)等。

关于c++ - 带有自定义分配器的 std::vector 针对 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60484106/

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