自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wangdamingll的博客

个人的一些学习总结

  • 博客(27)
  • 收藏
  • 关注

原创 容器搜索算法的选择

一、总体介绍在count、find、binary_search、lower_bound、upper_bound和equal_range中做出选择很简单。当你调用时,选择算法还是成员函数可以给你需要的行为和性能,而且是最少的工作。按照这个建议做(或参考上面表格),你就不会再有困惑。

2016-12-23 16:35:58 392

原创 map/multimap 排序操作

一、背景引入正如所有了解零件(Widget)的人所知道的,Widget有重量和最高速度class Widget {public:        ...        size_t weight() const;        size_t maxSpeed() const;        ...};此外众所周知的是给Widget排序的自然方法是按

2016-12-23 14:39:57 510

原创 使用ptr_fun、mem_fun和mem_fun_ref

一、背景引入如果我有一个函数f和一个对象x,我希望在x上调用f,而且我在x的成员函数之外。C++给我三种不同的语法来实现这个调用:// 语法#1:当f是一个非成员函数f(x);     // 语法#2:当f是一个成员函数 ,而且x是一个对象或一个对象的引用             x.f();                  // 语法#3:当f是一个成员函数,而且p

2016-12-21 16:17:16 342

原创 STL: 用纯函数做判断式

一、必要的概念●     判断式是返回bool(或者其他可以隐式转化为bool的东西)。判断式在STL中广泛使用。标准关联容器的比较函数是判断式,判断式函数常常作为参数传递给算法,比如find_if和多种排序算法。●     纯函数是返回值只依赖于参数的函数。如果f是一个纯函数,x和y是对象,f(x, y)的返回值仅当x或y的值改变的时候才会改变。 ●     一个判断式类

2016-12-21 11:49:08 334

原创 仿函数类:合理处理大对象和多态

仿函数类的设计原则:数据量小,单态 // 用于修改的BPFC的新实现类template                                   class BPFCImpl :  public unary_function {               private:// 以前在BPFC里的所有数据现在在这里        Widget w;  

2016-12-14 15:51:33 305

原创 用accumulate或for_each来统计区间

一、accumulate用法1、求一个区间的和、积(默认)// 建立一个list,放一些double进去list ld;                                                ... // 计算它们的和,从0.0开始                                                   double

2016-12-14 15:23:31 383

原创 STL实现简单的忽略大小写字 符串比较

利用STL名字第二长的算法----lexicographical_compare// 返回在忽略大小写的情况下c1是否在c2前面;bool ciCharLess(char c1, char c2) {                                                                                        

2016-12-14 11:26:47 735

原创 避免在指针的容器上使用类似remove的算法造成的内存泄漏

一、问题引入你在管理一堆动态分配的Widgets,每一个都可能通过检验,你把结果指针保存在一个vector中:class Widget{public:        ...// 这个Widget是否通过检验        bool isCertified() const;               ...};// 建立一个vector然后用vector v

2016-12-14 10:58:51 410

原创 STL的remove算法详解

一、remove的声明:templateForwardIterator remove( ForwardIterator first,  ForwardIterator last,  const T& value)remove结论:remove并不“真的”删除东西,因为它做不到。注意:list::remove除外二、remove详细过程1、举例:vec

2016-12-14 10:25:54 999

原创 STL部分排序

一、我们先总结一下排序选择:●     如果你需要在vector、string、deque或数组上进行完全排序,你可以使用sort或stable_sort。●     如果你有一个vector、string、deque或数组,你只需要排序前n个元素,应该用partial_sort。●     如果你有一个vector、string、deque或数组,你需要鉴别出第n

2016-12-13 18:34:30 563

原创 需要无格式一个一个字符输入时考虑使用istreambuf_iterator

先让我来吹嘘一下:这种技术2行代码就可以读到文件所有内容哦第一种方式:#include #include ifstream inputFile("interestingData.txt");// 把inputFile读入fileDatastring fileData( ( istream_iterator(inputFile) ),  istream_ite

2016-12-13 17:00:48 1692

原创 reverse_iterator的插入和删除操作

关于标准容器的4种迭代器的转化,我前面的博客已经提到了,可以参考一下一、base成员函数的用法举个例子,看一下这段代码,我们首先把从数字1-5放进一个vector中,然后产生一个指向3的reverse_iterator,并且通过reverse_iterator的base初始化一个iterator:vector v;v.reserve(5);                

2016-12-13 16:07:34 1427

原创 标准容器类提供的四种迭代器类型

四种类型分别为:iterator、const_iterator、reverse_iterator、const_reverse_iterator对于container而言,iterator的作用相当于T*,而const_iterator则相当于const T*(你可能也见过T const*这样的写法:)。增加一个iterator或者const_iterator可以在一个从容器开头趋向尾部

2016-12-13 15:14:03 454

原创 提高map[key]=value的效率

当关乎效率时应该在map::operator[]和map-insert之间仔细选择我们知道 这个表达式 m[k] = v;  检查键k是否已经在map里。如果不,就添加上,以v作为它的对应值。如果k已经在map里,它的关联值被更新成v。举例一:考虑插入一个新值这个语句m[1] = 1.50; 功能上等价于这个:typedef map

2016-12-13 14:44:47 1335

原创 避免原地修改set和multiset的键而修改其值

一、问题引入正如所有标准关联容器,set和multiset保持它们的元素有序,这些容器的正确行为依赖于它们保持有序。 如果你改了关联容器里的一个元素的值(例如,把10变为1000),新值可能不在正确的位置,而且那将破坏容器的有序性。很简单,是吗?这对于map和multimap特别简单,因为试图改变这些容器里的一个键值的程序将不能编译:map m;...// 错误!map

2016-12-13 11:19:14 978

原创 关联容器:永远让比较函数对相等的值返回false

一、问题引入让我向你展示一些比较酷的东西。建立一个set,比较类型用less_equal,然后插入一个10:// s以“set > s;   s.insert(10);   现在尝试再插入一次10:s.insert(10)  对于这个insert的调用,set必须先要判断出10是否已经位于其中了。 我们知道它是,但set可是木头木脑的,它必须执行检查

2016-12-13 10:12:04 654

原创 为指针的关联容器指定比较类型

一、现象描述假定你有一个string*指针的set,你把一些动物的名字插入进set:set ssp;                                               // ssp = “set of string ptrs”ssp.insert(new string("Anteater"));ssp.insert(new string("Wombat")

2016-12-12 20:24:50 382

原创 使用“交换技巧”来修整容器过剩容量

假设你正在为TV游戏秀《Give Me Lots Of Money — Now!》写支持软件,而且你要跟踪可能的竞争者,你把它们保存在一个vector中:class Contestant {...};vector contestants;当这个秀需要一个新的竞争者时,它将被申请者淹没,你的vector很快获得很多元素。但是秀的制作人只要预期的游戏者,一个相对少数符合

2016-12-12 18:51:42 315

原创 如何将vector 和 string 传递给 类C的API

一、vectorvector v;对于这样的类C的API: void doSomething(const int* pInts, size_t numInts);if (!v.empty()) {doSomething(&v[0], v.size());}如果你在一个不好的环境中,你可能会碰到一些半吊子的人物,他们会告诉你说可以用v.begin()代替&v[

2016-12-12 18:11:03 287

原创 删除容器对象的几种方式

●去除一个容器中有特定值的所有对象: 1、如果容器是vector、string或deque,使用erase-remove惯用法。Container c; c.erase(remove(c.begin(), c.end(), 1963),              // 当c是vector、string                c.end());          

2016-12-12 15:50:10 1117

原创 永不建立auto_ptr的容器

请注意拷贝auto_ptr的独特性!auto_ptr pw1(new Widget);        // pw1指向一个Widget auto_ptr pw2(pw1);                    // pw2指向pw1的Widget;                                         // pw1被设为NULL。(Widget的

2016-12-12 15:27:01 363

原创 包含指针的容器delete方式

如何正确处理包含指针的容器是值得探究的。一、常见的方式,直接手动deletevoid doSomething(){        vector vwp;        for (int i = 0; i                 vwp.push_back(new Widget);        ...             for (vector:

2016-12-12 15:08:52 612

原创 尽量使用区间成员函数代替它们的单元素兄弟

尽量使用区间成员函数来代替单元素兄弟的三个可靠的论点:1、区间成员函数更容易写,2、它们更清楚地表达你的意图,3、而且它们提供了更高的性能。快!给定两个vector,v1和v2,使v1的内容和v2的后半部分一样的最简单方式是什么?不要为“当v2有偶数个元素时才有一半”而烦恼,只要做一些合理的东西。时间到!如果你的答案是v1.assign(v2.begin() + v

2016-12-12 11:26:05 311

原创 容器:用empty来代替检查size()是否为0

对于任意容器c,写下if (c.size() == 0)...本质上等价于写下if (c.empty())...这就是例子。你可能会奇怪为什么一个构造会比另一个好,特别是事实上empty的典型实现是一个返回size是否返回0的内联函数。你应该首选empty的构造,而且理由很简单:对于所有的标准容器,empty是一个常数时间的操作,但对于一些list实现,si

2016-12-12 10:20:39 530

转载 getopt和getopt_long函数

本文转自:http://blog.csdn.net/cashey1991/article/details/7942809平时在写程序时常常需要对命令行参数进行处理,当命令行参数个数较多时,如果按照顺序一个一个定义参数含义很容易造成混乱,而且如果程序只按顺序处理参数的话,一些“可选参数”的功能将很难实现。在Linux中,我们可以使用getopt、getopt_long、getop

2016-12-07 19:32:42 249

原创 WebSocket使用(C++环境)(二) --- libwebsockets库的安装与使用

一、参考网址:libwebsockets官网: https://libwebsockets.org/libwebsockets的API:https://libwebsockets.org/lws-api-doc-master/html/modules.html https://libwebsockets.org/libw...

2016-12-05 20:06:47 28915

原创 >> << 0xf 等用法

一、>>这是C语言中的“右移运算符”。一般情况下,他是按位操作。特点:1.双目运算符,就像+、-、*、/一样,格式为(数1)>>(数2) 2.数1是被操作数,如被减数、被除数等;数2是右移位数。 3.优先级低,结合性:从左向右运算如:8>>1=?表示将被移数向右移动1位如何操作?1.化十进制数为(注意了)对应的二进制数,对应指格式对应2.通通右移,正数左补

2016-12-02 14:25:19 9429

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除