模版库简介

STL的代码从广义上讲分为3类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模版类和模版函数的方式。在C++标准中,STL被组织为13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<vector>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。本文主要介绍组成构件、基本结果和STL变成概述。

1.容器

容器类是可以包含其他对象的类,就像数组和队列堆栈等数据结构包含整数、小数和类等数据成员一样。STL可以包含常见的向量类、链表类、双向队列类、集合类和图类等。

STL中已经提供的容器主要包含:

vector<T>,是一种向量

list<T>,是一个双向链表容器,完成标准C++数据结构中链表的所有功能。

queue<T>,是一种队列容器,完成标准C++数据结构中队列的所有功能。

stack<T>,是一种栈容器,完成标准C++数据结构中栈的所有功能。

deque<T>,是双端队列容器,完成标准C++数据结构中栈的所有功能。

priority_queue<T>,是一种按值排序的队列容器。

set<T>,是一种集合容器。

multiset<T>,是一种允许出现重复元素的集合容器。

map<key,val>是一种关联数组容器。

multimap<key,val>是一种允许出现重复key值的关联数组容器。

以上容器设计高效,还提供了接口。程序员可以在任何适当的地方使用它们。

容器可以分为两大类:序列式容器和关联式容器。序列式容器主要vector、list和deque;关联式容器包含set、map、multiset和multimap等容器模版类。

2.算法

STL提供了非常多的数据结构算法。这些算法在命名空间std的范围内定义,通过包含头文件<algorithm>来获取使用权。

常见的部分算法包括:

for_each()

find()

find_if()

count()

count_if()

replace()

replace_if()

copy()

unique_copy()

sort()

equal_range()

merge()

STL所用算法都是基于模版实现的。

3.迭代器

迭代器技术能够使程序反复地对STL容器的内容进行访问,非常快捷和重要。反复的访问意味着一次可以访问一个或多个元素。迭代器为访问容器提供了通用的方法,类似于C++的指针。当参数化类型是C++内部类型时,迭代器即C++指针。STL定义了5种类型的指示器,根据使用方法而命名。每种容器都支持某种类别的迭代器,常见的迭代器类别包括:输入、输出、前向、双向和随机访问。

(1)输入迭代器主要用于为程序中需要的数据源提供输入接口,数据源一般指容器、数据流等。输入迭代器只能够从一个序列中读取数值,迭代器可以被修改、被引用等。

(2)输出迭代器主要用于输出程序中已经得到的数据结构(容器、数据流)。输出迭代器只能够向一个序列写入数据,输出迭代器也可以被修改和被引用。

(3)双向迭代器即可以用来读又可以用来写,双向迭代器和前向迭代器很类似。双向迭代器可以同时进行前向和后向元素操作。所有的STL容器都提供了双向迭代器功能,既有利于数据的写入和读出,还有利于提供更加灵活的数据操作。有的容器甚至提供了随机接入迭代器。

(4)随机接入迭代器可以通过跳跃的方式访问容器中的任意数据,使数据的访问更加灵活。随机访问迭代器具有双向迭代器的所有功能,是功能最强大的迭代器类型。

迭代器的诞生使得算法和容器分离成为可能。算法是模版,其类型依赖于迭代器,不会局限于单一容器。不同的STL算法需要不同类型的迭代器来实现相应的功能。因为不同类型的STL容器支持不同类型的迭代器,所以不能对所有容器使用相同的算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值