草庐IT

STL容器之queue

全部标签

c++ - boost::shared_ptr 标准容器

假设我有一个foo类,并希望使用std::map来存储一些boost::shared_ptrs,例如:classfoo;typedefboost::shared_ptrfoo_sp;typededstd::mapfoo_sp_map;foo_sp_mapm;如果我向map添加一个新的foo_sp但使用的键已经存在,现有的条目是否会被删除?例如:foo_sp_mapm;voidfunc1(){foo_spp(newfoo);m[0]=p;}voidfunc2(){foo_spp2(newfoo);m[0]=p2;}原来的指针(p)被p2替换后会不会被释放?我很确定会这样,但我认为值得询问

c++ - 我可以使用 CArchive 在 MFC 中序列化 STL 映射吗?

我需要把一个map的内容(key是int的ID,value是自定义的struct)写入一个文件,稍后从文件中加载。我可以在带有CArchive的MFC中完成吗?谢谢! 最佳答案 在MFC中,我认为最简单的方法是首先序列化map的大小,然后简单地遍历所有元素。你没有指定你使用的是std::map还是MFC的CMap,但是基于std::map的版本可以看起来像这样:voidMyClass::Serialize(CArchive&archive){CObject::Serialize(archive);if(archive.IsStori

c++ - 创建一个不可复制的 STL 迭代器是个好主意吗?

大多数时候,STL迭代器是可复制构造的,因为一些STL算法需要这样做来提高性能,例如std::sort。但是,我一直在从事一个包装FindXFileAPI(previouslyaskedabout)的宠物项目,但问题是不可能围绕此API实现可复制的迭代器。不能以任何方式复制查找句柄——DuplicateHandle特别禁止将这些类型的句柄传递给它。如果您只是维护查找句柄的引用计数,那么任何拷贝的单个增量都会导致所有拷贝的增量——显然这不是拷贝构造的迭代器应该做的。既然我不能在这里满足迭代器的传统复制构造要求,是否值得尝试创建一个“STL风格”的迭代器?一方面,创建一些其他枚举方法不会落

c++ - set_union 与 multiset 容器?

当一个或两个输入容器是具有重复对象的多重集时,算法std:set_union的返回值是多少?dups会迷路吗?让我们假设例如:multisetms1;ms1.insert(1);ms1.insert(1);ms1.insert(1);ms1.insert(2);ms1.insert(3);multisetms2;ms2.insert(1);ms2.insert(1);ms2.insert(2);ms2.insert(2);ms2.insert(4);vectorv(10);set_union(ms1.begin(),ms1.end(),ms2.begin(),ms2.end(),v.b

c++ - 模板方法中的标准容器

问候。我不太清楚如何解释自己,但我相信一段代码会让你明白我打算做什么:templatevoidmyFunction(A&list){typenameA::iteratorcurrent=list.begin();typenameA::iteratorend=list.end();while(current!=end){current++;}}其中A是一个STL容器(vector、列表...)。这就像盗梦空间,但有模板:模板、模板内部等...问题是:当您的模板的一个参数本身就是一个模板时,您会怎么做...并且仍然希望支持此模板支持的所有类型。这当然不会编译(它说“A不是模板”)。有人知道

c++ - C++ STL 标准有变化吗?

我一直虔诚地使用SGI的StandardTemplateLibraryProgrammer'sGuide(STLPG)作为引用手册,每当我使用STL在C++中实现某些东西时。直到昨天,它从未让我失望,但昨天我在工作中使用std::vector并与我的一位同事结对编程,他告诉我使用assign方法。我不认识这种对我来说不寻常的方法,所以我开始挖掘std::vectorSTLPG的一部分,没有提及任何分配方法。我的同事将我指向cpluplus.com的页面std::vector你瞧,它与其他一些方法一起使用,例如at,我也从未见过。这让我很困惑,所以我对这个问题进行了中世纪研究,并深入研究

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

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

c++ - iterator 和 const_iterator (STL) 效率不同

在Qt中有类似的类来列出map。这些类提供了一个返回const_iterator的begin_const()方法。文档说应尽可能使用这些const_iterators,因为它们速度更快。如果实例本身是const,STL只会给你一个const_iterator。只实现了一个begin()方法(为const重载)。使用iterator和const_iterator读取访问元素时有什么区别吗?(我不知道为什么它们在Qt中有区别) 最佳答案 Thedocumentationsaysthattheseconst_iteratorsshould

c++ - STL 中的 VS 编译器错误 C2752 ("more than one partial specialization matches")

不知何故,我喜欢这些显示(基本?)问题的“最短”程序。在VS2008中测试一些模板代码时出现了这个错误(它也已在VS2010和VS2012中得到确认,见下文):c:\programfiles(x86)\microsoftvisualstudio9.0\vc\include\xmemory(225):errorC2752:'std::_Ptr_cat_helper':morethanonepartialspecializationmatchesthetemplateargumentlistwith[_T1=constfloat(**),_T2=constfloat(**)]我可以将问题归

c++ - 容器使用的内部类型的内存分配

C++11标准在一般容器要求中有以下几行。(23.2.1-3)Forthecomponentsaffectedbythissubclausethatdeclareanallocator_type,objectsstoredinthesecomponentsshallbeconstructedusingtheallocator_traits::constructfunctionanddestroyedusingtheallocator_traits::destroyfunction(20.6.8.2).Thesefunctionsarecalledonlyforthecontainer’