C++ 是否有函数请求std::set的容量?
对于C++ 是否有函数请求std::set的容量?,c++,set,C++,Set,对于std::vector,我们可以使用vector::reserve(n)请求向量容量至少足以包含n个元素。那么std::set呢?我们是否有类似的功能来保留其功能?我问这个问题是因为有时,当std::set变量用作来自另一个动态库(使用多线程调试(/MTd))的函数的引用参数时,它是为std::set变量分配足够功能的请求 编辑 一种可能的解决方案可能是使用get_分配器函数: std::set<float> abc; float *p; p = abc.get_
std::vector
,我们可以使用vector::reserve(n)
请求向量容量至少足以包含n个元素。那么std::set
呢?我们是否有类似的功能来保留其功能?我问这个问题是因为有时,当std::set变量用作来自另一个动态库(使用多线程调试(/MTd))的函数的引用参数时,它是为std::set变量分配足够功能的请求
编辑
一种可能的解决方案可能是使用get_分配器函数:
std::set<float> abc;
float *p;
p = abc.get_allocator().allocate(100);
for(int i=0; i<100; i++)
abc.insert(abc.end(),i);
std::set<float>::iterator it = abc.begin();
std::set<float>::iterator itEnd = abc.end();
while(it != itEnd)
{
std::cout<<(*it)<<std::endl;
it++;
}
abc.get_allocator().deallocate(p,100);
std::设置abc;
浮动*p;
p=abc.get_分配器().allocate(100);
对于(int i=0;i使用<代码> STD::vector < /C> >,提供函数给Reave空间是重要的,因为在C++标准中保证向量中的所有元素都是连续的。这意味着,如果您试图“<代码> PuxFuff< <代码> >比当前保留的更多的项目,则需要分配更多的内存,P可能是在另一个地方,可能需要移动现有项目(我认为这是基于实现的)。这一切都需要时间,因此您可以保留(或预先分配)您认为需要的空间
相反,像std::set
这样的容器通常被实现为一个树。这里的主要区别是元素在添加时通常是动态分配的。不要求项目在内存中是连续的,因此不需要“保留”所述项目的任何空间——根据实现情况,可以根据需要在可用内存中的任何位置进行分配
不确定这是否是您要寻找的答案。这是不是通过查看而不是在此处发布来解决的?还是您要寻找的是其他内容?我不认为更新中的代码会达到您期望的效果-您正在分配一块内存,但我不相信它会被“分配”到您的集合,该集合将根据需要分配自己的内存。如果它按照您的期望执行操作,那么这是危险的,因为集合仍然认为它有100个有效项。谢谢。我可以找到一个解决方案,就是使用get_allocator()。allocate()函数。我已经重新组织了我的问题。正如我在上面的评论中提到的,我认为这不会达到您的预期。对于集合,我能想到的预分配内存的唯一原因是,如果您需要它是一个特定的位置(例如,嵌入式系统中的映射内存)。在这种情况下,您可能无论如何都需要一个自定义分配器。