草庐IT

STL容器之queue

全部标签

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

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

c++ - std::queue<T, list<T>>::size() 在 O(n) 中很慢?

我在使用队列的代码中遇到了意外的性能行为。我意识到当队列中有更多元素时性能会下降。事实证明,使用size()方法是原因。这是一些显示问题的代码:#include#include#include#include"Stopwatch.h"usingnamespacestd;structBigStruct{intx[100];};intmain(){CStopwatchqueueTestSw;typedefBigStructQueueElementType;typedefstd::queue>QueueType;//typedefstd::queueQueueType;//nosurpris

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++ - 如何对 std::shared_ptr<Widget> 对象的容器进行排序?

classWidget;std::vector>containerclassCriterium{public:booloperator()(constWidget&left,constWidget&right)const;};如何根据标准对容器进行排序,无需定义另一个标准,例如:classCriteriumForPointers{public:booloperator()(conststd::shared_ptr&left,conststd::shared_ptr&right)const;}; 最佳答案 您可以使用lambda作为适

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之后

c++ - 使用 2 个参数堆叠 STL

我在C++中实现了一个B树,我有一个保存对的堆栈。我的问题是,我如何放入这个堆栈,因为push只接受1个参数。谢谢 最佳答案 使用标准库提供的std::pair。您可以使用函数make_pair创建它们.#include#include#includeusingnamespacestd;intmain(intargc,char**argv){intmyInt=1;stringmyString("stringVal");stack>myStack;myStack.push(make_pair(myString,myInt));retu

c++ - 使用 STL 算法重写的指针的循环示例,没有循环?

例如,我将如何重写下面的代码,使用没有循环的STL算法?vectorpizzaBox;intbiggestSlice=0;for(int*p=&pizzaBox[0];p!=pizzaBox[pizzaBox.size()];p++){if(*p>biggestSlice)biggestSlice=*p;} 最佳答案 假设您实际上是指vector,并在更正循环结束条件后,您可以使用max_element算法在这里:intbiggestSlice=*max_element(pizzaBox.begin(),pizzaBox.end()