草庐IT

STL-Like

全部标签

c++ - 可以将具有 Base 类型的 STL 容器转换为 Derived 类型吗?

是否可以将STL容器从Base类型转换为Derived类型?例如,我有两个vector。第一个是基类类型,第二个是派生类类型。classBase{//Code};classDerive:publicBase{//Code};用法vector*vec_base=newvector;//AddsomeDerivetypedatatovec_basevector*vec_derive=(vector*)(vec_base);//UsingelementsasDerivepointers.Worksfine.这样可以吗?(它工作正常,但我想对此发表一些评论)。非常感谢你。编辑:根据答案更新。说

具有私有(private)复制构造函数的类的 C++ STL vector ?

我们的代码中有一个类,比如类C.我想创建一个C类对象的vector.但是,复制构造函数和赋值运算符都被特意声明为private。.我不想(也许不允许)改变它。是否有任何其他干净的方法来使用/定义vector? 最佳答案 你可以使用vector或vector>相反。 关于具有私有(private)复制构造函数的类的C++STLvector?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questio

c++ - 如何找到 map 的中间元素?? STL

您好,我在STL库/C++中的Map概念之间徘徊。intarr[]={10,15,14,13,17,15,16,12,18,10,29,24,35,36};intn=sizeofarr/sizeof*arr;mapbst;map::iteratorit;vectormedian_output;constintk=5;for(inti=0;i现在当我打印这张map时,它是按排序顺序打印的。现在有什么最简单的方法可以找到这张map的中间点.....需要找到更大问题的中位数...所以尝试实现平衡二叉搜索树.. 最佳答案 map是一棵平衡搜

c++ - 防止在 STL 容器中释放内存

我有一个经常重复使用的STL容器(std::list)。我的意思是我将一些元素插入容器在处理过程中移除元素清理容器冲洗并重复多次当使用callgrind进行分析时,我看到大量调用new(malloc)和delete(free)这可能非常昂贵。因此,我正在寻找某种方法来优先预分配相当多的元素。我还希望我的分配池继续增加,直到达到高水位线,并且分配池继续卡在内存上,直到容器本身被删除。不幸的是,标准分配器会不断调整内存池的大小,因此我正在寻找能够执行上述操作而无需自己编写的分配器。是否存在这样的分配器,我在哪里可以找到这样的分配器?我在使用GCC的Linux和使用STLPort的Andro

c++ - STL 容器的二进制兼容性

假设我用C++编写了一个DLL,并希望导出一个采用std::vector参数的方法。我可以希望不同的STL版本之间有任何二进制兼容性吗? 最佳答案 我不知道版本之间有任何兼容性保证,甚至在同一编译器上的发布和调试之间也没有。一个解决方案是为vector创建一个包装器。创建一个类,它具有容器所需的所有功能,并根据对私有(private)vector的操作来实现它们,私有(private)vector是该类的唯一成员。将所有类代码保留在DLL中。 关于c++-STL容器的二进制兼容性,我们在

c++ - 在 C++11 基于范围的 'for' 循环中获取对 STL 容器元素的引用

for(Somethingsomething:setOfSomething)//OKfor(Somethingconst&something:setOfSomething)//OKfor(Something&something:setOfSomething)//ERRORerror:invalidinitializationofreferenceoftype'Something&'fromexpressionoftype'constSomething'迭代器从什么时候开始返回constSomething?它应该返回Something&或Somethingconst&。由于基于范围的“f

c++ - 这两种比较STL vector 的方法有什么区别?

很少有在线示例使用相等运算符来比较两个STLvector对象的内容,以验证它们是否具有相同的内容。vectorv1;//addsomeelementstov1vectorv2;//addsomeelementstov2if(v1==v2)cout相反,我阅读了其他示例,其中std::equal()使用函数。boolcompare_vector(constvector&v1,constvector&v2){returnv1.size()==v2.size()&&std::equal(v1.begin(),v1.end(),v2.begin());}这两种比较STLvector的方式有什么

c++ - 为什么C++中的大括号初始化解决了STL容器的初始化问题?

我正在阅读EffectiveModernC++,在关于大括号初始化的部分。Evenwithseveralinitializationsyntaxes,thereweresomesituationswhereC++98hadnowaytoexpressadesiredinitialization.Forexample,itwasn’tpossibletodirectlyindicatethatanSTLcontainershouldbecreatedholdingaparticularsetofvalues(e.g.,1,3,and5)然后他显示:std::vectorv{1,3,5};

将自定义类作为第二种类型的 C++ STL 映射

我想用一个int和我自己的自定义类创建一个map。有办法做到这一点吗?mapmyMap;如果没有,我该如何着手完成这项工作?基本上,我想要一个id(或者最好是一个enum)来指向我自己的自定义类。在大多数其他语言中,这将是一个简单的散列。 最佳答案 #includestd::mapmyMap;MyClassfoo;myMap[5]=foo;myMap[5].bar=10;你确实需要MyClass是默认和可复制构造的,所以它可以被创建(如果你使用,例如,myMap[5])并复制到map。

c++ - 关于C++模板语法的一个问题(STL库源码)

我现在正在阅读STL源代码。虽然我理解我在STL_list.h中阅读的内容,但我想完全理解以下代码片段(我认为主要与模板语法相关)。模板class_List_base{...typedeftypename_Alloc::templaterebind>::other_Node_Alloc_type;//(1)....typedef_Allocallocator_type;get_allocator()const{returnallocator_type(*static_cast(&this->_M_impl));}//(2)...};有人能解释一下为什么我们在第(1)行的_Alloc之后