草庐IT

stl-algorithm

全部标签

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

c++ - 为什么 'is_convertible' 在 <utility> std::pair (STL) 中?

template::value&&is_constructible::value>,enable_if_t::value&&is_convertible::value,int>=0>constexprpair(pair&&_Right)_NOEXCEPT_OP((is_nothrow_constructible::value&&is_nothrow_constructible::value)):first(_STDforward(_Right.first)),second(_STDforward(_Right.second)){//constructfrommovedcompatibl

c++ - 为什么动态创建 STL 容器被认为是不好的做法?

标题说明了这一点。不良实践示例:std::vector*FindPoints(){std::vector*result=newstd::vector();//...returnresult;}如果我稍后删除那个vector有什么问题吗?我主要用C#编程,所以在C++上下文中这个问题对我来说不是很清楚。 最佳答案 根据经验,您不会这样做,因为在堆上分配的越少,泄漏内存的风险就越小。:)std::vector也很有用,因为它以RAII方式自动管理用于vector的内存;现在通过在堆上分配它,您需要显式释放(使用deleteresult)

c++ - C++ STL 中的正则表达式

STL中是否有任何经过测试且无需任何额外编译器选项即可工作的native库?我尝试使用,但是编译器输出这个:在/usr/include/c++/4.3/regex:40包含的文件中,来自main.cpp:5:/usr/include/c++/4.3/c++0x_warning.h:36:2:error:#error此文件需要编译器和库支持即将发布的ISOC++标准C++0x。此支持目前处于试验阶段,必须使用-std=c++0x或-std=gnu++0x编译器选项启用。 最佳答案 G++4.3(可能还有更高版本)只是对头文件保持最大程

c++ - 为什么 C++ STL vector 在做很多保留时会慢 1000 倍?

我遇到了一个奇怪的情况。在我的程序中,我有一个循环将大量数据组合在一个巨大的vector中。我试图弄清楚为什么它运行得如此缓慢,尽管看起来我正在尽一切努力以高效的方式分配内存。在我的程序中,很难确定组合数据的最终vector应该有多大,但每条数据的大小在处理时是已知的。因此,我没有一次性保留和调整组合数据vector,而是为每个数据block保留足够的空间,因为它被添加到更大的vector中。就在那时,我遇到了这个可以使用下面的简单代码片段重复的问题:std::vectorarr1;std::vectorarr2;std::vectorarr3;std::vectorarr4;intn

c++ - 使用哪个STL容器?

这个问题在这里已经有了答案:InwhichscenariodoIuseaparticularSTLcontainer?(10个答案)关闭9年前。如果出现以下情况,我应该使用哪个STL容器:定期插入和删除数据。定期随机访问数据。例如:dataset(4,10,15)如果我想找到最接近9的数字,那么它应该返回10。我只存储一个整数。需要排序可以处理10万个数据集我想到了使用vector,但是vector的插入和删除很昂贵。vector如果我要使用列表,我必须在访问数据之前访问O(n)个元素。list我正在考虑使用set,因为如果它被排序会很好,但我不太确定使用SET的效率所以我希望有人能给

c++ - 为什么有些 STL 算法提供额外的 '_if' 函数而不是重载?

这个问题在这里已经有了答案:Whydoesthestandardlibraryhavefindandfind_if?(4个答案)关闭7年前。为什么一些STL算法提供额外的'_if'函数而不是重载它?//example:find(beg,end,val);find_if(beg,end,pred);难道他们不能只重载这些算法而不是创建额外的_if函数吗?