一、容器
作为STL的最主要组成部分--容器,分为向量(vector),双端队列(deque),表(list),队列(queue),堆栈(stack),集合(set),多重集合(multiset),映射(map),多重映射(multimap)。 容器 向量vector 双端队列deque 表list 队列queue 堆栈stack 集合set 多重集合multiset 映射map 多重集合multimap
二、算法 STL的算法也是非常优秀的,它们大部分都是类属的,基本上都用到了C++的模板来实现,这样,很多相似的函数就不用自己写了,只要用函数模板就OK了。 我们使用算法的时候,要针对不同的容器,比如:对集合的查找,最好不要用通用函数find(),它对集合使用的时候,性能非常的差,最好用集合自带的find()函数,它针对了集合进行了优化,性能非常的高。 三、迭代器 迭代器功能(Abilities Of Iterator Gategories) 输入迭代器 Input iterator Reads forward 输出迭代器 Output iterator Writes forward 前向迭代器 Forward iterator Read and Writes forward 双向迭代器 Bidirectional iterator Read and Writes forward and backward timap 随机迭代器 Random access iterator Read and Write with random access 所有的STL容器 容器(Container)的概念的出现早于模板(template),它原本是一个计算机科学领域中的一个重要概念,但在这里,它的概念和STL混合在一起了。下面是在STL中出现的7种容器: vector(向量)——STL中标准而安全的数组。只能在vector 的“前面”增加数据。 deque(双端队列double-ended queue)——在功能上和vector相似,但是可以在前后两端向其中添加数据。 list(列表)——游标一次只可以移动一步。如果你对链表已经很熟悉,那么STL中的list则是一个双向链表(每个节点有指向前驱和指向后继的两个指针)。 set(集合)——包含了经过排序了的数据,这些数据的值(value)必须是唯一的。 map(映射)——经过排序了的二元组的集合,map中的每个元素都是由两个值组成,其中的key(键值,一个map中的键值必须是唯一的)是在排序 或搜索时使用,它的值可以在容器中重新获取;而另一个值是该元素关联的数值。比如,除了可以ar[43] = "overripe"这样找到一个数据,map还可以通过ar["banana"] = "overripe"这样的方法找到一个数据。如果你想获得其中的元素信息,通过输入元素的全名就可以轻松实现。 multiset(多重集)——和集合(set)相似,然而其中的值不要求必须是唯一的(即可以有重复)。 multimap(多重映射)——和映射(map)相似,然而其中的键值不要求必须是唯一的(即可以有重复)。 怎样在一个map中使用类? Map是一个通过key(键)来获得value(值)的模板类。 另一个问题是你希望在map中使用自己的类而不是已有的数据类型,比如现在已经用过的int。建立一个“为模板准备的(template-ready)”类,你必须确保在该类中包含一些成员函数和重载操作符。下面的一些成员是必须的: 缺省的构造函数(通常为空) 拷贝构造函数 重载的”=”运算符 你应该重载尽可能多的运算符来满足特定模板的需要,比如,如果你想定义一个类作为 map中的键(key),你必须重载相关的运算符。但在这里不对重载运算符做过多讨论了。 //程序:映射自定义的类。 #include <string> class CStudent int main(int argc, char* argv[]) mapStudent["Joe Lennon"] = CStudent(103547, 22); // 通过姓名来访问Cstudent类中的成员 return 0; TYPEDEF 如果你喜欢使用typedef关键字,下面是个例子: typedef set <int> SET_INT; 编写代码的一个习惯就是使用大写字母和下划线来命名数据类型。
|