摘要: STL中仿函数是重要的组成部分.所谓的仿函数就是通过重载括号运算符实现的, 如下:STL库中都是泛型仿函数如小于操作:STL中定义了许多有用的操作,如less(小于),less_equal(小于等于),greater(大于),greater_equal(大于)等.我们主要看几个函数适配器.1)bind1st程序:输出:bind1st可以将两个参数函数转换成一个参数函数, 是一个简单的委托,上例中bind1st绑定仿函数less()左边的参数, replace_if调用bind1st仿函数时传入less()右边参数,由bind1st将两个参数传入less()中进行实际调用返回结果.2)bind2 阅读全文
posted @ 2013-10-07 21:20 蒲蜡 阅读(355) 评论(0) 推荐(0) 编辑
摘要: STL的bitset是一个对位进行存储和操作的容器,可以轻松对bit位进行访问.bitset的模板声明如下:templateclassbitset;这里我们要给出需要分配位数.vs2008中bitset内部使用的是一个unsigned long数组来存储数据, 在x86,32位机器中一个unsigned long长度为4个字节,也就是32位.bitset内部实现不复杂,就是对unsigned long数组进行位操作,下面给一个例子,展示bitset用法.输出set操作默认是将所有位置为1, set可以对某一位设置值;reset默认是将所有位置为0, reset还可以将某一位设置为0;flip操 阅读全文
posted @ 2013-10-07 21:16 蒲蜡 阅读(458) 评论(0) 推荐(0) 编辑
摘要: 之所以把这三个容器放在一起,是因为他们都是容器适配器.STL中queue就是我们常用的FIFO队列,实现是一个容器适配器,这种数据结构在网络中经常使用.queue的模板声明:template >classqueue;这里第二个参数不再是一个内存分配器,而是一个容器,也就是这里我们可以传递一个deque, list, vector等容器,只要这个容器支持queue中调用的借口.因此queue只负责统一调用接口.queue的成员函数很简单,成员函数也只是对我们设置的容器进行调用,因此不多列举.STL中priority_queue也是一个容器适配器,故名思意它是一个带优先级的队列.priori 阅读全文
posted @ 2013-10-07 21:13 蒲蜡 阅读(485) 评论(0) 推荐(0) 编辑
摘要: STL中deque是我们常说的双端队列,既可以从头添加元素,也可以从尾部添加元素,deque的成员函数和vector的成员函数十分相似,但是它们的内部实现却又很多不同.deque的模板声明:template >classdeque;1)deque的内存分配方式,deque的内存管理方式比vector复杂.上面程序在执行完最后的push_back后内存分布如下图:追踪push_back函数我们看到:我们先看几个变量的含义, _Myoff成员变量始终表示队头距离存储空间开始位置的元素个数, _DEQUESIZ宏定义如下,可以看到为了避免太小内存块,_DEQUESIZ会根据我们定义类型大小来确 阅读全文
posted @ 2013-10-07 21:12 蒲蜡 阅读(1698) 评论(0) 推荐(0) 编辑
摘要: STL中list和我们传统意义上的链表一样可以进行动态节点添加和释放.优点:适合动态删除和添加缺点:不支持随机访问.C++标准对list模板声明:template >classlist;1)list的构造有多种方式和vector差不多,如下:listfirst;listsecond(4,100);listthird(second.begin(),second.end());listfourth(third);intmyints[] = {16,2,77,29};listfifth(myints,myints+sizeof(myints) /sizeof(int) );2)list的内存分 阅读全文
posted @ 2013-10-07 21:06 蒲蜡 阅读(396) 评论(0) 推荐(0) 编辑
摘要: STL中vector是通常作为数组使用,不过它更像一个动态数组,在实际项目开发中大量使用.优点:存储空间连续,可以使用下标访问,时间复杂度O(1).缺点:不适合从中间删除和添加元素.C++标准规定的vector模板声明:template > class vector;T : 存储的数据类型Allocator : 存储空间分配器(默认为std::allocator)1)首先vector可以作为数组使用,因此我们可以在初始化vector时,指定元素个数和初始值.vector v; //v中含有0个元素vector v(5); //v中含有5个元素vector v(5, 1); //v中含有5 阅读全文
posted @ 2013-10-07 21:04 蒲蜡 阅读(667) 评论(0) 推荐(0) 编辑