草庐IT

stl_algobase

全部标签

c++ - STL 可迭代对象的迭代器循环宏

概念因此,我试图定义一个宏来简化以下代码:for(vector::iteratoriter=iterable.begin();iter!=iterable.end();iter++)和for(map::iteratoriter=iterable.begin();iter!=iterable.end();iter++)等等现有工作到目前为止,我有#defineevery(iter,iterable)::iteratoriter=iterable.begin();iter!=iterable.end();iter++for(vectorevery(iter,iterable))但我想进一步

C++ STL - STL sort() 的第三个参数如何工作?

我想对classPerson的对象数组进行排序基于其数据成员'age'.我将对象存储在vectorv中.据我所知,至少有4种方法可以执行此操作,根据下面编写的方法,我有以下问题。如何operator()在类工作中定义?我不应该在这里重载'我在方法1中发送了一个对象作为第三个参数。但是,在方法2中,我发送了一个函数的名称。为什么会这样?四种方法中哪种最好?我觉得方法三最简单。方法一classcmp{public:booloperator()(Personconst&a,Personconst&b){returna.age方法二boolcmp(constPersona,constPerso

c++ - 在排序的 STL 容器中查找给定键的 "best matching key"

问题我有带时间戳的数据,我需要根据时间戳进行搜索,以便获得与我的输入时间戳最接近的现有时间戳。最好这应该用STL来解决。boost::*或STL::tr1::*(来自带有Featurepack的VS9)也是可能的。带时间戳的数据示例:structSTimestampedData{time_tm_timestamp;//SortingcriterionCDatam_data;//Payload}接近stl::vector,sort()和equal_range()自map或set只允许我找到完全匹配,我不会进一步使用其中之一。所以现在我有一个vector我将数据添加到其中。在搜索之前,我使

c++ - 如何为 STL 类容器提供公共(public) const 迭代器和私有(private)非 const 迭代器?

我有一个包含std::list的类,我希望为const_iterator提供publicbegin()和end(),为普通迭代器提供privatebegin()和end()。但是,编译器看到私有(private)版本并提示它是私有(private)的,而不是使用公共(public)const版本。我知道C++不会重载返回类型(在本例中为const_iterator和迭代器),因此它选择了非常量版本,因为我的对象不是const。如果没有在调用begin()之前将我的对象转换为const或者没有重载名称begin是否有办法实现这一点?我认为这是一个已知的模式,人们以前已经解决过,并且想效仿

c++ - 从子类的STL vector 到基类 vector 的转换

我想知道是否可以将派生类值的vector转换为基类值的vector。具体来说,我希望能够将基类对象的vector传递给其形式参数采用基类vector的函数。它似乎不可能直接作为以下代码示例产生错误(使用g++):#includeclassA{};classB:publicA{};voidfunction(std::vectorobjs){}intmain(intargc,char**argv){std::vectorobjs_b;objs_b.push_back(B());function(objs_b);}test.cc:16:error:conversionfrom‘std::ve

c++ - 如何在 C++ 代码中链接 STL?

我在MySql5.5.7rc的源文件sql_parse.cc中写了一些代码。我在那里使用了vector、allocator等,但编译器未与标准模板库(STL)链接。谁能建议我该怎么做?这是错误消息:libsql.a(sql_parse.cc.o):Infunction`std::vector,std::allocator>,std::allocator,std::allocator>>>::push_back(std::basic_string,std::allocator>const&)':sql_parse.cc:(.text._ZNSt6vectorISsSaISsEE9push

c++ - 是什么让 STL 如此之快?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。如果按照通常的实现方式实现数组类,则其性能与其STL等效项(如vector)相比会较慢。那么是什么让STL容器/算法变快了呢?

c++ - 我将如何使用 for_each 删除 STL 映射中的每个值?

假设我有一个STL映射,其中的值是指针,我想将它们全部删除。我将如何表示以下代码,但使用std::for_each?我很高兴使用Boost的解决方案。for(stdext::hash_map::iteratorir=myMap.begin();ir!=myMap.end();++ir){deleteir->second;//deleteallthe(Foo*)values.}(我找到了Boost的checked_delete,但我不确定如何将它应用到迭代器代表的pair)。(此外,出于这个问题的目的,请忽略将需要删除的原始指针存储在STL容器中不是很明智的事实)。注意:我随后找到并在下

C++ STL::inplace_merge 和 sort 有什么区别

据我所知,inplace_merge做的事情与排序完全相同,只是它只在某些情况下有效(当容器已经在两个已排序的部分中时)。换句话说,这两者有区别吗:intfirst[]={1,3,5,7};intsecond[]={2,4,6,8};vectorv(8);vector::iteratorit;copy(first,first+4,v.begin());copy(second,second+4,v.begin()+4);inplace_merge(v.begin(),v.begin()+4,v.end()).intfirst[]={1,3,5,7};intsecond[]={2,4,6,

c++ - 将元素添加到 STL 容器的背面

我正在寻找一种将元素添加到STL容器背面的通用方法。我希望代码支持尽可能多的STL容器类型。以下代码演示了我的问题:#include#includeusingnamespacestd;templateclassS{Tbuilt;typenameT::iteratorbuilt_it;public:S():built{},built_it{built.end()}{}voidadd_to(typenameT::value_typee){built.emplace(built_it,e);++built_it;}constT&get(){returnbuilt;}};intmain(){S