C++ STL标准库
STL 组件STL 是 C++ 标准程序库的核心。STL 内的所有组件都由模板构成,其元素可以是任意型别。程序员通过选用恰当的群集类别调用其成员函数和算法中的数据即可,但代价是 STL 晦涩难懂。STL 组件主要包括容器,迭代器、算法和仿函数。容器容器即用来存储并管理某类对象的集合。每一种容器都有其优点和缺点。为满足程序的各种需求,STL 准备了多种容器类型,容器可以是 arrays 或是 lin
STL 组件
STL 是 C++ 标准程序库的核心。STL 内的所有组件都由模板构成,其元素可以是任意型别。程序员通过选用恰当的群集类别调用其成员函数和算法中的数据即可,但代价是 STL 晦涩难懂。
STL 组件主要包括容器,迭代器、算法和仿函数。
容器
容器即用来存储并管理某类对象的集合。每一种容器都有其优点和缺点。为满足程序的各种需求,STL 准备了多种容器类型,容器可以是 arrays 或是 linked lists,或者每个元素有特别的键值。
迭代器
迭代器用于在一个对象群集的元素上进行遍历动作。对象群集可能是容器,也可能是容器的一部分。
迭代器的主要用途是为容器提供一组很小的公共接口。利用这个接口,某项操作可以行进至群集内的下一个元素。每种容器都提供了各自的迭代器。迭代器了解该容器的内部结构,所以能够正确行进。迭代器的接口和一般指针类似。
算法
算法用来处理群集内的元素,可以出于不同目的搜寻、排序、修改、使用那些元素。所有容器的迭代器都提供一致的接口,通过迭代器的协助,算法程序可以用于任意容器。
STL 的一个特性是将数据和操作分离。数据由容器类别加以管理,操作则由可定制的算法定义。迭代器在两者之间充当“粘合剂”,以使算法可以和容器交互运作。
STL 的另一个特性即组件可以针对任意型别运作。“标准模板库”这一名称即表示“可接受任意型别”的模板,并且这些型别均可执行必要操作。
在 STL 中,容器又分为序列式容器和关联式容器两大类,而迭代器的功能主要是遍历容器内全部或部分元素的对象。迭代器可划分为 5 种类属,这 5 种类属归属两种类型:双向迭代器和随机存取迭代器。
SIL 中提供的算法包括搜寻、排序、复制、重新排序、修改、数值运算等。
仿函数
STL中大量运用了仿函数。仿函数具有泛型编程强大的威力,是纯粹抽象概念的例证。
STL基本结构
STL 中已经提供的主要容器:
- vector :一种向量。
- list :一个双向链表容器,完成了标准 C++ 数据结构中链表的所有功能
- queue :一种队列容器,完成了标准 C++ 数据结构中队列的所有功能。
- stack :一种栈容器,完成了标准 C++ 数据结构中栈的所有功能。
- deque :双端队列容器,完成了标准 C++ 数据结构中栈的所有功能。
- priority_queue :一种按值排序的队列容器。
- set :一种集合容器。
- multiset :一种允许出现重复元素的集合容器。
- map <key, val>:一种关联数组容器。
- multimap <key, val>:一种允许出现重复 key 值的关联数组容器。
使用实例:
#include<vector>//容器头文件
#include<algorithm>//算法头文件
#include<functional>//函数头文件
#include<iostream>//标准输入输出头文件
using namespace std;// 引入 std(输入和输出) 命名空间
int main(void)
{
int ia[6]{ 17,90,50,22,47,33 };
vector<int, allocator<int>> vi(ia, ia + 6);
cout << count_if(vi.begin(), vi.end(), not1(bind2nd(less<int>(), 40))); //输出大于或等于40的元素个数
return 0;
}
各个组件协作
容器与算法 的组合使用 无法避免 复杂度 :线性的,指数的,对数的等。取决于对数据的具体操作和容器选择。
STL的区间概念:
STL 容器的结构与分类:
序列容器 Sequence Containers:
关联容器 (元素包含 (Key,Value)) Associative Containers:
不定序容器 (元素位置不固定) Unordered Containers:
更多推荐
所有评论(0)