草庐IT

stl-algorithm

全部标签

C++ STL 映射,std::pair 作为键

这就是我用map定义的方式。std::map,int>edMap;我对如何插入值感到困惑,我总是遇到编译错误。这就是我尝试插入的方式。std::pairkey;edMap.insert(key,d);编译错误是1>------Buildstarted:Project:spellsuggest,Configuration:DebugWin32------1>Compiling...1>breathalyzer.cpp1>d:\personal\spellsuggest\spellsuggest\breathalyzer.cpp(70):errorC2664:'std::_Tree::it

c++ - STL vector 和使用 [] 运算符

我正在尝试编译以下行,但我遇到了指针混淆问题:inttest=_s->GetFruitManager()->GetFruits()[2].GetColour();std::cout其中_s是指向S的指针,GetFruitManager()返回指向FruitManager对象的指针,GetFruits()返回std::vector*然后我希望能够使用运算符[]来访问特定的Fruit对象并调用Fruit的GetColour()方法。我认为在某些时候我需要取消引用GetFruits()返回的vector*,但我不知道该怎么做。如果这有点令人费解,我们深表歉意!我对这门语言还是很陌生,但希望能

c++ - 从此图表了解 STL vector 的时间复杂度

我遇到了一些事情site它指出在STLvector的后面插入可以是O(1)或O(n)。我相信最后的插入对于vector来说应该是O(1)。谁能澄清这一点并告诉我作者所说的O(n)是什么意思。作者指出,对于在后面插入STLvectorBack:O(1)orO(n)。是哪一个? 最佳答案 复杂度需要摊销常数。这意味着并非每次插入都需要相同的时间长度,但是从长远来看,无论集合的大小如何,它都会平均为一个常数。它通过在当前block变满时分配一个更大的block,并将数据从当前block复制到新block来实现。“诀窍”是block大小以几

c++ - 使用 STL map/set/multiset/multimap,如何找到大于或等于搜索键的第一个值?

假设我有一组值,存储在std::set中:{1,2,6,8}我有一个搜索键,比如3。我想将3放入函数中并获取大于或等于3的第一个值,在本例中我想要获取6。map/set/multimap/andset中提供的find()函数当然会返回这种情况的结束迭代器。在这种情况下是否有类似的find函数会返回6? 最佳答案 是的:upper_bound(X)返回一个指向第一个大于X的元素的迭代器。还有一个lower_bound(X)函数,它返回一个指向第一个不小于X的元素的迭代器。因此,半开区间[lower_bound(X),upper_bou

c++ - 整个 C++ STL 代码包含在 .h 而不是 .cpp/.c 文件中的原因是什么?

我刚刚下载了STL源代码,我注意到STL模板类的所有定义都包含在.h文件中。函数定义的实际源代码位于.h文件中,而不是.cpp/.c文件中。这是什么原因?http://www.sgi.com/tech/stl/download.html 最佳答案 因为很少有编译器实现模板的链接。很难。这是一篇关于它的简短但(我认为)信息丰富的文章:http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=53我说“我认为”是因为除了广泛未实现之外,我真的不是很熟悉它。我最初说标准不

c++ - 使用 STL/Boost 初始化硬编码集<vector<int>>

像这样question已经问过,我想使用STL初始化一个容器,其中元素以最干净的方式进行硬编码。在这种情况下,元素是一个双重嵌套的容器:set>A;我想(例如)将以下值放入:A=[[0,0,1],[0,1,0],[1,0,0],[0,0,0]];C++0x很好,使用g++4.4.1。STL更可取,因为我不对代码的任何其他部分使用Boost(尽管我不介意用它举例!)。 最佳答案 这确实使用了g++4.4.1,带有-std=c++0x#include#includeusingnamespacestd;intmain(){set>A={{

c++ - 使用 C++ 和 STL 的 vector 元素乘积

用C++实现逐元素乘积并不难:vectora_array;vectorb_array;vectorc_array;vectordot_array;....for(inti=0;i这是一个非常简单的实现,我想知道STL中是否已经有更高效的算法。谢谢! 最佳答案 std::transform可用于将两个vector相乘:#include#include//Precondition:b.size()>=a.size()&&r.size()>=a.size()std::transform(a.begin(),a.end(),b.begin(

c++ - 我应该使用什么 C++ STL 类来减少由大量小分配引起的碎片?

随着时间的推移,我的C++类(class)构建了一个树结构。树中的每个节点当前都是在构造时分配的(使用new)。节点类只使用几个字节的内存。随着树的增长,可能会有100,000个节点;除了理论最大值2^33之外,树的构造时不知道最大节点数。我通过指针引用树结构中的节点。所有节点都在树被破坏时被释放,并且只有在那时。我正在寻找一个标准库容器或内存分配器/池,我可以使用它来分配和存储我的树类中的节点,以减少内存碎片和内存分配开销。我想避免编写自定义分配器。容器应具有以下两个属性:分配的对象不会在内存中移动,因此可以通过指针安全地引用。该类为大块对象分配内存,从而减少内存碎片。请注意,我不要

c++ - 如果我想让它忽略重复的元素,应该使用哪个 STL 容器?

我正在寻找一些STL(但不是boost)容器,在以下操作之后将包含2个元素:“abc”和“xyz”:std::XContainerstring_XContainer;string_XContainer.push_back("abc");string_XContainer.push_back("abc");string_XContainer.push_back("xyz");顺便说一句,我需要它只是为了在最后调用string_XContainer.size(),以获得唯一字符串的总数。所以也许我什至不需要容器,还有更优雅的方法吗? 最佳答案

C++: STL: set: 存储值常量

具有以下代码:#include#include#include#includeusingnamespacestd;classEmployee{//...int_id;string_name;string_title;public:Employee(intid):_id(id){}stringconst&name()const{return_name;}voidsetName(stringconst&newName){_name=newName;}stringconst&title()const{return_title;}voidsetTitle(stringconst&newTitl