STL六大组件

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 的头尾

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ STL(Standard Template Library)是C++标准库的一个重要组成部分,它提供了一套丰富的模板类和函数,用于支持常见的数据结构和算法操作。STL主要由六大组件组成,它们分别是: 1. 容器(Containers):包括vector、list、deque、set、map等,用于存储和管理数据。容器提供了不同的数据结构,如动态数组、链表、双端队列、集合和映射等。 2. 算法(Algorithms):包括排序、查找、合并等常见的算法操作。STL提供了一系列泛型算法,可以直接应用于各种容器,例如sort、find、merge等。 3. 迭代器(Iterators):用于遍历容器的元素。迭代器提供了一种通用的访问容器元素的方式,使得算法能够独立于具体容器类型而操作。 4. 分配器(Allocators):用于管理内存的分配和释放。分配器提供了一种可替换的内存管理机制,可以根据需要自定义内存分配策略。 5. 函数对象(Function Objects):也称为仿函数,是可调用对象的抽象。STL的很多算法可以接受函数对象作为参数,从而实现灵活的操作。 6. 适配器(Adapters):用于将一个容器类型转换为另一个容器类型。STL提供了一些适配器,例如stack、queue和priority_queue,它们基于已有的容器实现了不同的行为特性。 这些组件相互之间存在紧密的关联和依赖关系,共同构成了C++ STL的基础框架,提供了丰富而高效的编程工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值