草庐IT

stl_algobase

全部标签

c++ - 是否可以将STL复制功能与 map 一起使用

我想知道是否有任何技巧可以使用copywithmaps将map的内容复制到数组中。因为STL映射是键值和映射值的组合,所以映射的元素形成键值对。这会阻止我们使用标准算法,如std::copy。例如下面的代码给出错误:#include#include#include#includeintmain(){std::maptest(4);test[0]=11;test[2]=1.23;test[3]=23.29;test[1]=12.12;double*test_arr=(double*)malloc(4*sizeof(double));std::copy(test.begin(),test.

c++ - 为什么 STL 在查找时会映射核心转储?

所以,在这种情况下,我需要查看一个对象是否在我的STL映射中。如果不是,我将添加它。charsymbolName[]={'H','e','l','l','o','\0'};maptheMap;if(theMap.find(symbolName)==theMap.end()){TheObjecttheObject(symbolName);theMap.insert(pair(symbolName,theObject));}当对象不在map中时,我在theMap.find上获取核心转储。据推测,如果该项目不在map中,它应该返回一个迭代器,相当于map::end这是怎么回事?海湾合作委员会

C++ STL 101 : Overload function causes build error

如果我不重载myfunc,就可以工作的简单代码。voidmyfunc(inti){std::coutv;v.push_back(1);v.push_back(2);std::vectors;s.push_back("one");s.push_back("two");std::for_each(v.begin(),v.end(),myfunc);std::for_each(s.begin(),s.end(),myfunc);return;}int_tmain(intargc,_TCHAR*argv[]){std::cout两次for_each调用都会重复以下构建错误。errorC2914

C++ STL map.find() 找不到我的东西

我构建了一个map并加载了数据。如果我遍历我看到的所有元素,它们都是有效的。但是,查找方法没有找到我的项目。我确定这是我在做的愚蠢的事情。这是片段://definitions//Iaminsertingapersonclassandusingthefirstnameasthekeytypedefstd::mapmapType;mapType_myMap;mapType::iterator_mapIter;...Person*pers=newPerson(FirstName,LastName,Address,Phone);_myMap.insert(make_pair(pers->fir

c++ - 在哪里可以下载 .h 和 .cpp 文件的 C++ STL 源代码?

我从http://www.sgi.com/tech/stl/download.html下载了STL源代码,但它只有.h用于函数声明。我在哪里可以下载.cpp文件来阅读实际的实现?例如,在STL_multimap.h或STL_map.h中,它有:templateinlinevoidswap(multimap&__x,multimap&__y){__x.swap(__y);}我想知道交换的实际实现,如__x.swap(__y);我没有看到交换的实际代码在哪里。在这里,它只是调用自己。 最佳答案 .h文件包含实现。该页面上的许多heade

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我说“我认为”是因为除了广泛未实现之外,我真的不是很熟悉它。我最初说标准不