STL及标准库
文章平均质量分 61
first_wolf
linux
展开
-
STL 六大组件概述
(一)STL提供六大组件:(1)容器(containers):顺序容器(sequence):vector、list和deque。关联容器(associative):set和map。从实现角度来看,STL容器是一种class template。(2)算法(algorithms)从实现角度来看,STL算法是一种function template。(3)迭原创 2013-02-28 14:46:32 · 647 阅读 · 0 评论 -
二 迭代器(四)迭代器相应型别及traits编程技法
一 迭代器相应的型别:如果你希望你所开发的容器能够与STL水乳交融,一定要为你的容器的迭代器定义这五种相应型别。(一) 根据经验,最常用到的迭代器相应型别有五种:(1)value_type:是指迭代器所指对象的类型。(2)difference_type:用来表示两个迭代器之间的距离,因此它也可以用来表示一个容器的最大容量,因为对于连续空间的容器,头尾之间的距离就是其最大容量原创 2013-03-10 20:49:25 · 968 阅读 · 0 评论 -
三 迭代器(三)迭代器适配器(Iterator adapters)
一 迭代器适配器(Iterator adapters)迭代器是一个纯粹抽象概念:任何东西,只要行为类似迭代器,它就是一个迭代器。C++标准程序库提供了数个预先定义的特殊迭代器,即所谓迭代器适配器,它不仅起辅助作用,还能赋予整个迭代器抽象概念更强大的能力。使用时需包含头文件。其中Insert iterators和Reverse iterators定义于中,Stream iterators原创 2013-03-10 10:49:15 · 979 阅读 · 0 评论 -
五 STL算法(二)stl_algo.h
一 概述:定义于SGI内的所有算法包含:heap算法(定义于中,stl_algo.h包含);set相关算法和其它的算法。二 heap算法(1)定义于中,被头文件#include。(2)具体算法:*make_heap():*push_heap():*pop_heap():*sort_heap():三 set相关算法(与常规的集合操作不同)原创 2013-03-24 10:41:03 · 977 阅读 · 0 评论 -
五 STL算法概述
一 概述:(1)算法的一般形式:*所有泛型算法的前两个参数都是一对迭代器,通常称为first和last,用以标示算法的操作区间。*这个[first,last)区间的必要条件是,first必须能够经由累加(increment)操作符的反复运用,从first到达list。*任何一个STL算法的声明都,都表现出它所需要的最低程度的迭代器类型。*许多的STL算法不只支持一个版本,某个版原创 2013-03-24 10:15:04 · 843 阅读 · 0 评论 -
三 序列式容器(一)vector
一 vector概述:(1)概述:vector塑造出一个动态数组,因此,它本身是“将元素置于动态数组中加以管理”的一个抽象概念。不过STL Stantard并未要求必须以动态数组实作vector,只是规定了相应条件和操作复杂度。(2) vector与array的区别:1.array是静态空间,一旦分配就不能改变;要换个大(或小)一点的空间,可以,但是一切琐碎细节由客户端自己原创 2013-03-15 20:42:15 · 930 阅读 · 0 评论 -
三 序列式容器(三)deque
一 deque概述:(一)deque的特点:*支持随机存取,头尾端都可以插入和删除元素。(二)deque与vector的不同:*头尾两端进行安插和删除。*存取元素时,deque的内部结构会多一个间接过程,所以元素存取和迭代器的动作会稍慢。*迭代器需要在不同区块间跳转,所以不能是一般指针。*在对内存区块有所限制的系统中,deque可以有更多的元素,因为它使用不止一原创 2013-03-16 16:45:42 · 659 阅读 · 0 评论 -
三 序列式容器(五)priority_queue(heap)(container adapter)
一 heap:(1)heap概述:(heap是一种完全二叉树,这个完全二叉树满足堆的性质)*heap不归属于STL容器组件,缺省情况下priority_queue利用一个max_heap来实现,max_heap以一个vector(或array)表现的complete binary tree实现。*小技巧:vector的索引为0的位置保留,那么当complete binary tree中原创 2013-03-16 16:49:53 · 807 阅读 · 0 评论 -
三 关联式容器(五)hash_map与hash_multimap
一 hash_map定义:(1)hash_map以hashtable为底层机制,几乎所有hash_map的接口都是调用hashtable的接口来实现的。(2)实现文件中hash_map的定义:template class hash_multimap{private: typedef hashtable, _Key, _HashFcn,原创 2013-03-18 15:17:23 · 1104 阅读 · 0 评论 -
三 关联式容器(三)hashtable
一 hashtable概述:(1)SGI STL特性:*采用链地址法来解决碰撞问题。表格使用vector来实现(如下图)*hash table的迭代器是forward迭代器,没有后退操作。*如果元素个数大于bucket vector的大小时(即装载因子大于1时),需要再散列。*hashtable内置了28个质数作为bucket大小的数目(初始化和再散列时使用)原创 2013-03-18 15:14:49 · 808 阅读 · 0 评论 -
一STL配置器(一)总体概述
一 STL标准规格:配置器定义于中,中内含以下文件:#include //负责内存空间的配置和释放:allocate()函数负责内存配置,deallocate函数负责内存释放。#include //负责对象内容的构造与析构:定义了construct()和destroy()两个函数。#include //定义了一些全局函数,用来填充或复制大块内存数据:u原创 2013-03-06 20:32:02 · 673 阅读 · 0 评论 -
二 迭代器(一)迭代器类属
一 基本概念:(1)迭代器:是一个“可遍历STL容器内全部或部分元素”的对象。一个迭代器用来指出容器中的一个特定位置。与指针的不同之处:迭代器是个所谓的smart pointers,具有遍历复杂数据结构的能力。其下层运行机制取决于其所遍历的数据结构,因此,每一种容器都必须提供自己的迭代器,所以打算使用某种容器的迭代器不需要含入专门的头文件。(2)begin()和end(原创 2013-03-10 10:25:27 · 769 阅读 · 0 评论 -
三 关联式容器(四)hash_set与hash_multiset
一 hash_set的定义:(1)hash_set以hashtable为底层机制,所以几乎所有的hash_set操作行为都是调用hashtable的操作行为而已。(2)中hash_set的定义:template class hash_set{private: typedef hashtable, _EqualKey,原创 2013-03-18 15:16:52 · 940 阅读 · 0 评论 -
三 关联式容器(一)set和multiset
一 set概述:(使用set和multiset时需包含头文件,其中set定义于中,multiset定义于中)当想知道一个值是否存在时,使用set容器是最合适的。(1)set的特性:*标准STL set以RB-tree为底层机制。*所有元素都会根据特定的排序准则,根据元素的键值自动将元素排序。*set元素的键值就是实值,实值就是键值。*set不允许两个元素有相同的键值原创 2013-03-18 11:14:51 · 715 阅读 · 0 评论 -
三 序列式容器(二)list
一 list概述:(1)list的数据结构:一个环状双向链表。list特点:*不支持随机存取*任何位置上元素的安插和移除都非常快,始终是常数时间内完成。*不提供subscript(下标)操作符,也不提供at()。*Lists并未提供容量、空间重新分配等操作函数。*Lists提供了不少特殊的成员函数,专门用于移动元素。(2)list的迭代器:Bidirecti原创 2013-03-16 16:45:06 · 811 阅读 · 0 评论 -
五 STL算法(一)数值算法
一 概述:使用数值算法需要包含头文件,但它们实际定义于中。二 相关算法:(1)accumulate:用来计算[first,last)内所有元素和init的值的总和。如果希望计算[first,last)中所有数值的总和,应该把init设置为0。accumulate的定义://版本1templateT accumulate(InputIterator fi原创 2013-03-24 10:39:24 · 727 阅读 · 0 评论 -
三 容器综述
一 容器(containers):容器用来管理一组元素,STL提供了如下两类容器:(1)序列式容器(sequential containers):序列式容器,其中的元素都是可序的,但未必有序。STL提供了vector、deque、list、stack、queue、priority_queue等。其中stack、queue由于只是将deque改头换面而成,技术上被归为适配器(原创 2013-03-15 16:37:13 · 811 阅读 · 0 评论 -
三 序列式容器(四)stack和queue( container adapters)
一 stack(使用时包含头文件,实际定义于)(1)stack以deque作为缺省的底部结构,也可以使用list。缺省采用deque而不是vector的原因:deque移除元素时会释放内存,并且不必在重新分配时复制全部元素。stack容器适配器的特点:*stack不允许有遍历行为。stack只允许在最顶端删除、添加和获取最顶端元素的操作。*只有最顶端的元素才有机会被外界原创 2013-03-16 16:48:42 · 734 阅读 · 0 评论 -
六 配接器(一) container adapters
一 概述:(1)container adapter:容器配接器包括:stack和queue。详见容器(stack和queue)。原创 2013-03-25 20:31:05 · 773 阅读 · 0 评论 -
七 Strings类(二)
待续...原创 2013-03-30 10:34:38 · 716 阅读 · 0 评论 -
八 Stream classes(一)
...原创 2013-03-30 10:36:03 · 718 阅读 · 0 评论 -
六 配接器(二)iterator adapters
一 概述(纵使千变化万,始终是扮演迭代器的部分作用,所以只能出现在需要迭代器的地方):STL提供的迭代器配接器包括:insert iterator、reverse iterator和stream iterator。使用时需包含头文件。其中Insert iterators和Reverse iterators定义于中,Stream iterators定义于头文件中。原创 2013-03-25 20:31:48 · 727 阅读 · 0 评论 -
六 配接器(adapters)概述
一 配接器分类STL提供三种配接器:(1)容器配接器(container adapter):STL提供两个容器配接器:queue和stack,它们都是修饰deque的接口而获得的。(2)迭代器配接器(iterator adapter):STL提供的迭代器配接器包括:insert iterator、reverse iterator和stream iterator。原创 2013-03-25 20:29:48 · 820 阅读 · 0 评论 -
七 Strings类(一)
待续...原创 2013-03-30 10:33:44 · 624 阅读 · 0 评论 -
七 Strings类(三)
待续...原创 2013-03-30 10:35:05 · 633 阅读 · 0 评论 -
八 Stream classes(二)
待续原创 2013-03-30 10:36:18 · 675 阅读 · 0 评论 -
八 Stream classes(三)
待续原创 2013-03-30 10:36:32 · 625 阅读 · 0 评论 -
六 配接器(三)function adapters
一 仿函数配接器种类:(1)对返回值进行逻辑否定:not1,not2。(2)对参数进行绑定:bind1st,bind2st。(3) 用于函数合成:compose1,compose2。(4)用于函数指针:ptr_fun。(5)用于成员函数指针:mem_fun、mem_fun_ref。如下图:二 对返回值进行否定:(1)源代码:1. not1: temp原创 2013-03-25 20:32:23 · 706 阅读 · 0 评论 -
三 关联式容器(二)map和multimap
一 pair类型:(1)pair对象的创建和初始化:pair是一种模板类。1.创建pair时必须提供两个类型名:pair对象所包含的两个数据成员各自对应的类型名字,这两个类型不必相同。例如:pairp(28,"James")如果不提供初始化式,则调用默认构造函数对其成员采用值初始化。可用typedef简化。2.除了构造函数之外,标准库还定义了一个make_pair函数,由传原创 2013-03-18 11:17:13 · 832 阅读 · 0 评论 -
三 序列式容器(六)Bitset
一 Bitset概述:(1)bitset是一个内含位(bit)或布尔(boolean)值且大小固定的array。class bitset定义于头文件之中,class bitset是个template class,有一个template参数,用来指定位的数量:namespace std{templateclass bitset;}例如:bitsetset;//产生一个原创 2013-03-17 19:08:49 · 865 阅读 · 0 评论 -
二 迭代器(二)相关辅助函数
一 迭代器相关辅助函数:C++标准程序库为迭代器提供三个辅助函数:advance(),distance()和iter_swap()。前两者给所有迭代器一些原本只有Random Access迭代器才有的能力。 advance():前进(或后退)多个元素。distance():处理迭代器之间的距离。iter_swap():允许你交换两个迭代器的值。二 advan原创 2013-03-10 10:48:51 · 967 阅读 · 0 评论 -
四 仿函数又名函数对象
一 函数对象概述:(主要用途是用来搭配STL算法)(1)函数对象:是一个定义了operator()的对象。例如:class FunctionObjectType{void operator() (){statements;}}这样定义的优势:*函数对象比一般函数更灵巧,因为它可以拥有状态。*每个函数对象都有其型别。*执行速度上,函数对象比函数指针原创 2013-03-19 21:36:04 · 745 阅读 · 0 评论