STL概述

STL中心思想:将数据容器(containers)和算法(algorithms)分开,彼此设计独立设计,最后再以一帖胶着剂将它们撮合在一起。
                        如何设计出两者之间的良好胶着剂是STL的难题和关键
容器,算法,迭代器(iterator,扮演粘胶角色)的合作展示,以find()为例,只要给予不同的迭代器,find()便能够对不同的容器进行查找操作。
InputIterator find(InputIterator  first,InputIterator last, const T& value);

迭代器是一种行为类似指针的对象,而指针的各种行为中最常见也是最重要的是内同提领(dereference)和成员访问(member access),因此迭代器最重要的编程工作就是对operator*和operator->进行重载(overloading)工作

容器:置物之所也,几乎可以说,任何特定的数据结构都是为了实现某种特定的算法,STL容器即是将运用最广的一些数据结构实现出来,容器分为序列式(sequence)和关联式(associative)两种。
序列式(sequence)容器:其中所有元素都可序(ordered),但是未必有序,C++本身提供了一个序列式容器array,STL另外再提供vector、list、deque、stack、queue、priority-queue,其中stack和queue由于只是将deque改头换面而成,技术上被归类为配接器(adapter)

关联式(associative)容器:分为set(集合)和map(映射表)两大类,以及这两大类的衍生体multiset(多键组合)和multimap(多键映射表)这些容器的底层机制均以RB-tree(红黑树)完成,RB-tree也是一个独立的容器,但并不开放给外界使用。此外,SGI STL还提供了一个不在标准规格之列的关联式容器:hash table(散列表),以及以此hash table 为底层机制而完成的hash_set(散列多键组合)、hash_map(散列映射表)、hash_multiset(散列多键集合),hash_multimap(散列多键映射表)
所谓关联式容器,观念上类似联式数据库(实际上简单得多):每个数据(元素)都有一个键值(key)和一个实值(value),当元素被插入到关联式容器中时,容器内部结构(可能是RB-tree,也可能是hash_table)并依照其键值大小,以某种特定规则将这个元素放在适当的位置上,关联式容器没有头尾的概念(只有最大元素和最小元素),因此不会有所谓push_back(),pop_bakc()等操作。
  一般而言,关联式容器内部结构是一个平衡二叉树,以便获取良好的搜索效率。

算法:问题之解法也,广义上讲:每个程序都是一个算法,其中每个函数也是一个算法,因为它们都是用来解决逻辑活数学问题,但是唯有获得数学上的效能分析与证明,这样的算法才具有可复用性。
特定的算法往往搭配特定的数据结构,任何算法都必须考虑所该算法所消耗的资源,包括空间和时间,算法分析是一个重要的过程。

以上是对于STL的基础理解,关于具体容器、算法等我们将在以后的文章中进一步讨论。
















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值