STL源码解析1—六大组件关系
来源:互联网 发布:80c51单片机引脚功能 编辑:程序博客网 时间:2024/05/21 11:35
一. STL六大组件介绍
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容器都有自己的迭代器,只有容器本身才知道如何遍历自身的元素。
迭代器有五种型别:Input、Output、Forward、Bidirectional和Random Iterator。
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来实现的。
改变容器接口的称为容器适配器、改变迭代器接口的称为迭代器适配器、改变仿函数接口的称为仿函数适配器。
容器配接器(container adapter):改变容器接口。
迭代器配接器(iterator adapter):改变迭代器接口。
仿函数配接器(function adapter):改变仿函数接口。
6. 空间配置器
STL的空间配置器主要用来给容器进行空间的配置与管理,从实现的角度来说空间配置器是实现了一个动态分配空间、空间管理、空间释放的class template(类模板)。
(1)容器缺省的配置器为alloc,而非allocator。(两者区别,之后介绍)
(2)stl 将内存空间的配置/释放和对象内容的构造/析构分开,由不同操作负责。
内存配置操作由alloc:;alllocate()负责,内存释放由alloc::deallocate()负责;
对象构造由::construct()负责,对象析构由::destroy()负责。
(3)内存空间采用双层级配置器。第一级使用malloc()和free(),第二级则视不同的情况采取不同的策略,当配置区域块超过128bytes时,调用第一级配置器;当配置区域小于128byte时,采用memory pool整理方式。因为在小额区太多时,配置时负担也重,所以在小区域时用的策略也多。
(4)二级配置器,主动将小额区块的内存需求上调至8的倍数,并维护16个freelists,各自管理大小分别为8、16、24、32…128bytes的小额区块。
二. STL六大组件的交互关系
容器通过空间配置器取得数据存储空间;算法利用迭代器向容器存取数据;仿函数协助算法完成不同的策略;适配器可以用来修改容器、迭代器或仿函数的接口;
写这几种关系的时候自己也还是有很多不懂得地方,但是之后会对这几部分做分别介绍,一定得了解了,才能更好地使用!
- STL源码解析1—六大组件关系
- STL中六大组件的关系
- STL六大组件的交互关系
- STL标准库六大组件 关系 作用
- 《STL源码剖析》学习--六大组件
- STL —— STL六大组件
- STL学习—STL六大组件
- STL提供六大组件以及彼此之间的关系
- 我眼中的STL六大组件的关系
- STL六大组件
- STL六大组件
- STL六大组件简介
- STL六大组件
- STL六大组件
- STL 六大组件概述
- STL六大组件
- STL的六大组件
- STL六大组件
- Web设计原则
- Android 正则表达式开发中常用方法整理
- hdu 5040 Instrusive 2014 ACM/ICPC Asia Regional Beijing Online bfs
- struts2返回JSON配置
- struts线程安全
- STL源码解析1—六大组件关系
- Cocos2d-x教程(5)-播放音乐与音效
- 用户级线程和内核级线程
- Spring4学习笔记-通过注解配置bean
- Git资料---在win7系统下使用TortoiseGit(乌龟git)简单操作Git@OSC
- 面向对象的三个基本特征(讲解)
- MediaPlayerError (1,-110)的问题
- 【LeetCode】-Best Time to Buy and Sell Stock II
- 你对我的信任,是我自己毁掉的