草庐IT

stl-algorithm

全部标签

c++ - 如何按元素出现次数将多重集排序到容器

我想获取按元素出现次数排序的元素。这就是我想出的(mHeights是一个std::multiset):namespace{templateclassHistPair{public:HistPair(Ucount,Tconst&el):mEl(el),mNumber(count){}Tconst&getElement()const{returnmEl;}UgetCount()const{returnmNumber;}private:TmEl;UmNumber;};templatebooloperatorconst&left,HistPairconst&right){returnleft.

c++ - 将变体 SAFEARRAY 转换为 STL 容器的通用函数

我有一些函数可用于将2D变体SAFEARRAY转换为各种STL容器,有点像这样(仅供说明)templatestd::setSetFromSafeArray(VARIANTsrcArray){CComSafeArraysrcComArray(srcArray.parray);std::setdestContainer;for(ULONGi=0;i我觉得这不是一种非常符合C++风格的处理方式,这意味着我转换到的每个STL容器都有一个单独的函数。我的想法是为CComSafeArrays编写一个包装器和自定义迭代器,这样我就可以...std::copy(srcComArray.begin(),

c++ - 所有权应该在 STL 容器调用其值的析构函数之前还是之后结束?

在下面的代码中,一个X在全局容器中注册,成为它的共享所有者。X的析构函数测试它不再是此类所有权的一部分,我希望这是被销毁的有效先决条件。#include#includestructX{~X();};std::vector>global_x_reg;X::~X(){for(autoiter=global_x_reg.begin(),end=global_x_reg.end();iter!=end;++iter)if(iter->get()==this)throw"Oops.Xgetsdestroyedwhileitisstillowned!";}intmain(intargc,char*

C++ STL库详解:容器适配器stack和queue的结构及功能

一、stack1.1stack的介绍1.stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2.stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。3.stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:empty:判空操作back:获取尾部元素操作push_back:尾部插入元素操作pop_back:尾部删除元素操作4.标准容器vector、deque、

c++ - 如何使用具有特定构造函数的 STL priority_queue + 比较器?

我想这样做:#include#includeclassComparator{public:Comparator(SomeObject&rTool):mrTools(rTool){}booloperator()(conststd::string&a,conststd::string&b){returnmrTools.doSomething(a,b);}private:SomeObject&mrTools;}std::priority_queue,Comparator>queue;//我如何初始化这个队列,为Comparator提供它在构造函数中需要的引用? 最

c++ - STL 分配器和运算符 new[]

是否有使用operatornew[]的STL实现?作为分配器?在我的编译器上,生成Foo::operatornew[]private并没有阻止我创建vector...这种行为有任何保证吗? 最佳答案 C++标准,第20.4.1.1节。默认分配器allocate()函数使用全局运算符new:pointerallocate(size_typen,allocator::const_pointerhint=0);3Notes:Uses::operatornew(size_t)(18.4.1).

【C++入门】STL容器--vector底层数据结构剖析

 目录 前言 1.vector的使用    vector的构造 vector迭代器 vector空间相关的接口 vector功能型接口 find swap insert erase2.vector内部数据结构剖析reserve push_back和pop_backsize、capacity、empty、operator[]; insert和eraseresizeswap 拷贝构造和赋值重载构造函数补充 迭代器区间构造指定数值个数构造总结前言     vector在C++中非常重要的容器,在刷题中也经常使用,它是一个动态的数组,提供了快速的随机访问和在尾部的插入和删除操作。vector的底层实现

c++ - 为什么 BigInt、BigNum 或任意精度算术没有出现在 STL 或 C++ 的标准库中?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。这有什么具体原因吗?这是设计决定吗?BignumberinC++与其他搜索结果一起显示为此编写的类。不知道以后的版本会不会包含这个功能。

c++ - 使用 STL 容器设置 upper_bound

我有以下完美运行的代码。目标:给定一个数n,找出n的下一个和上一个数。基于下面的例子:如果n=50,那么我将分别得到60和40。我可以通过使用upper_bound获得60。但是我如何获得50之前的数字我似乎找不到提供的算法来做到这一点。setmyset;set::iteratorit,itlow,itup;for(inti=1;i引用http://www.cplusplus.com/reference/stl/set/lower_bound/,它说upper_bound“返回指向容器中第一个元素的迭代器,它不比较小于x”但我确定还有其他东西指向比较小于x的东西.提前致谢!:)

c++11 STL 的 binomial_distribution 极慢

我正在使用STL的“随机”生成二项式分布的随机数。当范围很大时,它变得非常慢。对于范围40,生成100个数字需要12秒。对于更大的范围,时间会急剧增加(我需要10000左右的范围)。它似乎不依赖于概率参数。我正在使用g++4.5.0。#include#includeusingnamespacestd;vectorv;default_random_enginegen(123);binomial_distributionrbin(40,0.7);intmain(){v.reserve(2000);for(inti=0;i输出:50.~/.../fs/>g++-std=c++0xq.cpp5