STL六大组件

来源:互联网 发布:动漫漫依淘宝 编辑:程序博客网 时间:2024/06/06 07:32

1 containers(容器),各种基本资料结构如 vector, list, deque, set, map┅,共约 11 种。其中有些亦被归类为 adaptors。
  
2 algorithms(演算法),各种基本演算法如 sort, search, copy, erase┅,共约 70 个。
  
3 iterators(迭代器):应用於容器与演算法身上的一种泛型指标,扮演两者间的胶着剂。[Gamma95] 对於 iterator 这种设计样式(design pattern)的定义是:提供一种方法,俾得依序巡访某个聚合物件(容器)所含的各个元素,而又不需曝露该聚合物件的内部表述方式。STL 共提供了五种 iterators 型态,以及各种衍生变化。Iterator 是 STL 中最重要最抽象的一个组件,它使容器与演算法可以各自独立发展,这是一种突破性的观念。不论就实作技术或抽象观念,iterator 都是 STL 中最关键的成份。了解了 iterators,也就进入了 STL 的大门。
  
4 function object:行为类似 function,但其实是一种 object。以实作技术而言,这是一个改写了 "call operator" 的 class。STL 提供 15 个现成的 function objects。
  
5 adaptors(调适器):用来改变(修饰)其他组件的介面。[Gamma95] 对於 adaptor 这种设计样式(design pattern)的定义是:将一个 class 的介面转换为另一个 class 的介面,使原本因介面不相容而不能合作的 classes,可以一起运作。在 STL 中,改变 function object 介面者,称为 function adaptor,改变 container 介面者,称为 container adaptor。改变 iterator 介面者,称为 iterator adaptor。例如 STL 提供的两个容器 queue 和 stack,其实都只不过是 adaptor,修饰了 deque 的介面而成就出另一种容器风貌。
  
6 allocator(记忆体配置器):容器空间配置系统。STL 提供有现成的 allocator。

 

下面这个例子,用上了 STL 的所有六种组件,目的是找出某个数列之中数值大於 40 的元素个数,答案为 4。从这个例子,你可以看到 STL 不同组件间的接合,发展到了一个怎样灵活的程度,像乐高积木一样,有无限可能。

#include
#include
#include
#include
using namespace std;

int main()
{
int ia[ ] = { 27, 210, 12, 47, 109, 83, 40 };
vector<
int,
allocator< int > > vec( ia, ia+7 );

cout << count_if(vec.begin(), vec.end(),
not1(bind2nd(less_equal(), 40)));

return 0;
}
// vector 是一个 STL 容器
// count_if 是一个 STL 演算法
// not1 和 bind2nd 都是 STL function adaptors
// less_equal<> 是一个 STL function object
// allocator<> 是一个 STL 记忆体配置器
// vec.begin() 和 vec.end() 分别传回两个 iterator,指向容器 vec 的头尾

原创粉丝点击