【C++ - 24】STL六大组件
一. STL六大组件介绍1. 容器STL容器包含两种:序列式容器主要有vector、list、deque,以及关联式容器主要有set、map、multiset、multimap。容器主要是用来存放数据的,从实现的角度来看容器是一种class template(类模板)。2. 算法STL包含算法达上百种,主要有sort、search、copy、erase、find等,...
一. STL六大组件介绍
1. 容器
STL容器包含两种:序列式容器主要有vector、list、deque,以及关联式容器主要有set、map、multiset、multimap。
容器主要是用来存放数据的,从实现的角度来看容器是一种class template(类模板)。
2. 算法
STL包含算法达上百种,主要有sort、search、copy、erase、find等,从实现的角度来说算法是一种function template(函数模板)
注意一个问题:任何的一个STL算法,都需要获得由一对迭代器所标示的区间,用来表示操作范围。这一对迭代器所标示的区间都是前闭后开区间,例如[first, last)。也就是说实际上,整个区间是从first开始到last-1,迭代器last指的是最后一个元素的下一个位置。在STL中所有区间都是采用前闭后开,这样可以带来很多方便。
3. 迭代器
STL中迭代器主要用来把容器和算法结合起来,扮演容器与算法之间的胶合剂,是所谓的“泛型指针”。从实现的角度看迭代器是一种将operator*、operator->、operator++、operator--等指针操作重载的class template(类模板)。所有的STL容器都有自己的迭代器,只有容器本身才知道如何遍历自身的元素。
4. 仿函数
仿函数是一种行为类似函数,但是实际是重载了operator()的class或class template(类模板),一般函数指针可视为狭义的仿函数。
#include<iostream>
#include<algorithm>
using namespace std;
class A{
public:
int operator()(int x, int y){
return x+y;
}
};
int main(){
A *a = new A();
cout<<(*a)(3,4)<<endl;
getchar();
return 0;
}
/*
输出
7
*/
5. 适配器
适配器主要用来修饰容器接口、迭代器接口或仿函数接口的东西;STL提供了stack、queue两种容器适配器,stack和queue的底层完全是由deque来实现的。
改变容器接口的称为容器适配器、改变迭代器接口的称为迭代器适配器、改变仿函数接口的称为仿函数适配器。
6. 空间配置器
STL的空间配置器主要用来给容器进行空间的配置与管理,从实现的角度来说空间配置器是实现了一个动态分配空间、空间管理、空间释放的class template(类模板)。
二. STL六大组件的交互关系
容器通过空间配置器取得数据存储空间;算法利用迭代器向容器存取数据;仿函数协助算法完成不同的策略;适配器可以用来修改容器、迭代器或仿函数的接口;
更多推荐
所有评论(0)