草庐IT

c++ - 是否有 BOOST 池固定大小的分配器?

我要创建unordered_map(因为我特别想要一个HashMap)。我想在开始时分配它的最大大小(根据我的限制)。因此,如果我要分配256个条目,并且每个条目的大小为1B(只是一个例子。假设1Byte包括Key和Value)。那么我的总大小unordered_map键+条目是256B。我想在分配器中预分配256B。然后,当unordered_map会调用allocate()/deallocate(),allocator将从已经分配的内存中给它1B。typedefboost::unordered::unordered_map,std::equal_to,???>>myMap它存在于B

c++ - 确认此标准库错误与 MSVC 2015 RC 中的分配器有关

这是一个SSCCE:#include#includetemplatestructmy_allocator:std::allocator{//Thisoverridingstructcausestheerrortemplatestructrebind{typedefmy_allocatorother;};//Ignoreallthis.typedefstd::allocatorbase;typenamebase::pointerallocate(typenamebase::size_typen,std::allocator::const_pointer/*hint*/=nullptr){

c++ - C++03 标准容器的堆栈分配器

对于一个软件,我必须避免在堆中使用任何内存,并且只依赖堆栈分配的内存。然后,这使我无法使用我真正想使用的任何C++标准容器,例如vector、映射、字符串(好吧,basic_string)来简化开发和数据操作。我发现了(许多)堆栈分配器的实现,例如thisone它本身引用了另外两个,或者thisone来自Chrome。其中许多并不完全符合标准,或者依赖于C++11(遗憾的是,我目前还在使用C++03)。您对C++03现有的良好堆栈分配器有任何反馈,或者我应该采用上述之一吗?谢谢! 最佳答案 HowardHinnant的short_a

c++ - STL 分配器,其他类型的复制构造函数,重新绑定(bind)

STL分配器需要这种构造函数形式(20.1.5):Xa(b);并要求Y(a)==b;在标准实现中,这意味着并实现为:templateallocator(constallocator&o)throw()我无法理解为何存在此要求。我知道分配器应该是静态的(没有任何状态),但到底为什么要能够像这样转换它们? 最佳答案 允许从其他分配器构造,因为容器需要使用与您指定的不同的分配器类型。例如,列表和映射分配它们的内部节点类型而不是它们公开的value_type。代码类似于:template>structContainer{typedefTva

c++ - 从具有一个分配器的 vector 移动到具有另一个分配器的 vector

我有一个vector其中alloc是std::allocator上的简单包装器执行一些额外的簿记,比如计算创建对象的数量等。现在我想从我的vector移动进入vector.vector移动函数似乎都不接受vectors具有不同的分配器。如何将数据从一个vector移动到分配器不同的另一个vector? 最佳答案 正如JohnZwinck在他的回答中解释的那样,您不能移动vector。但是,您可以按如下方式移动vector的元素:vectoru;...vectorv(std::make_move_iterator(u.begin())

c++ - 使用基于动态/状态的分配器的 STL 实现?

有谁知道允许在使用前将动态分配器传递给容器实例的STL实现。场景是我们有一个管理多个内存池的通用内存分配器,对于STL::vector的每个实例,我们希望从不同的内存池分配每个实例。标准STL实现的问题是您只能根据类型定义内存池,即所有类型为int的vector将从同一个池中分配。我已经将默认的STL::allocator换成了一个状态,即我们要从中分配此实例的池,但这对于STL::list来说效果不佳,它在默认构造函数。由于与我们的库相关的原因,我们在ctor中也没有针对所有对象的有效池,因此我们希望在用户可以使用STL容器之前调用“设置内存池”函数。有人遇到过支持这种事情的实现吗?

c++ - 对于具有默认分配器的标准容器,std::container::size_type 是否保证为 size_t?

喜欢:std::string::size_typestd::list::size_typestd::map::size_typestd::vector::size_type等等两者都是cplusplus.com和cppreference.com说他们通常是size_t,但它们是否真正、明确地保证为size_t的标准除非使用自定义分配器? 最佳答案 对于STL容器-不。[container.requirements.general]中标准的表96,其中列出了任何容器的容器要求X,解释得很清楚:但是,对于basic_string,siz

c++ - 容器适配器不支持迭代器

在一篇关于STL的C++文章中,有人说-由于容器适配器不支持迭代器,因此它们不能与STL算法一起使用。但是没有解释为什么ContainerAdapter不支持迭代器?谁能给我解释一下? 最佳答案 具有迭代器的堆栈或队列有什么意义?根据定义,堆栈是您只能插入和弹出的东西...迭代器会破坏这些适配器的全部目的 关于c++-容器适配器不支持迭代器,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questi

c++ - 存储分配器 - 它是什么?

我知道C和C++中的存储类(static、extern、auto、register,C++还添加了可变的和一些特定于编译器的类)但我不知道什么是存储分配器是。我不认为它指的是可在STL上实现的内存分配器,简单来说它是什么? 最佳答案 它是operatornew和operatordelete后面的任何东西(不要与new运算符和delete运算符)。operatornew从空闲存储中分配内存,operatordelete释放先前由operatornew分配的内存,以便可能的重用。当代码执行foo*ptr=newfoo(new运算符)时,

c++ - 为什么分配器常量在 vector 中?

vector在每种类型的构造函数中都有这个constallocator_type&alloc=allocator_type()为什么是常量?我看不出那有什么用。我可以看到传递一个分配器,这样多个vector可以共享同一个池,但可以从另一组vector中分离出来。但是,使用const是否意味着他们只会复制实例数据?复制池或任何它似乎没有用。为什么是常量? 最佳答案 分配器应该具有值语义,这意味着vector按值存储它(注意get_allocator()按值返回)。所以构造函数可以很容易地通过const引用获取分配器并复制它。