STL

本文详细介绍了C++ Standard Template Library (STL) 的六大组件:容器(顺序容器如vector、list、deque,关联容器如set、map)、泛型算法(如sort)、迭代器、函数对象、适配器(容器适配器如stack、queue、priority_queue,函数适配器)以及空间配置器。特别讨论了不同容器的特性和迭代器的类型,以及在操作中可能导致迭代器失效的情况。
摘要由CSDN通过智能技术生成

STL6大组件
1. 容器

用来存储数据的数据结构

顺序容器

vector、list、deque
顺序容器

关联容器

set、multiset、map、multimap

set
单集合容器,存储关键字

简单使用
insert 插入 _val
erase 定点删除 _where
底层实现
底层以红黑树实现
节点由三个域组成,左孩子L,数据data、右孩子R
特点
不允许关键字重复,提供了基于关键字的快速查询,find是二分查找。
multiset
实现了关键字的可重复性
map
单映射容器、不允许关键字重复,1-1映射
简单使用
insert 插入val
erase 删除
底层实现
以红黑树实现,节点由四个域组成,左孩子L,键key,值val,右孩子R
也可理解成三个域,左孩子L,键值对关系,右孩子R
特点

  • 1-1映射
  • 基于关键字的快速查询

支持关键字快速访问和查询。

multimap
实现了关键字的可重复性

容器适配器

stack、queue、priority_queue

2. 泛型算法

针对数据进行操作

sort 支持随机访问迭代器容器(vector)

3. 迭代器

容器与泛型算法分离设计,然后再通过迭代器粘合在一起

所有的迭代器都支持++和解引用*

输入性迭代器
从容器中读取元素
输出型迭代器
给容器写入元素
正向迭代器
结合输入和输出的功能

双向迭代器
不仅支持++也支持–回退
随机访问迭代器
要求对应的容器空间连续,支持任意偏移跳转、++、–

按照功能划分迭代器

  • 反转型迭代器 (reverse_iterator、const reverse_iterator)
    rbegin()迭代最后一个元素的当前位置
    rend()迭代第一个元素的前一位置
  • 插入型迭代器
  1. 前插型front_insert_iterator
  2. 后插型back_insert_iterator
  3. 按位置插入insert_iterator
  • 流式迭代器
  1. 输入流istream_iterator
  2. 输出流ostream_iterator

迭代器失效问题

vector
push_back:尾部迭代器,即已经指向end()的迭代器就会失效
insert:从插入点到尾部,所有迭代器都会失效。
pop_back:导致尾部迭代器失效
erase:导致从删除点到尾部,所有迭代器都会失效。
扩容:所有迭代器都会失效。

4. 函数对象
5. 适配器

适配器就是转换器,就是将容器转换成另一个容器

容器适配器

stack、queue(通过deque容器的接口实现栈先进后出的特性,实现队列后进先出的特性)

函数适配器

绑定器(将二元函数对象转换成一元函数对象)
bind1st绑定第一个参数、bind2nd绑定第二个参数
取反器(将函数对象的结果取反)
not1给一元函数对象取反,not2给二元函数对象取反

6. 空间配置器

一级空间配置器和二级空间配置器

把对象的内存开辟和对象的构造分开;把对象的析构和内存释放分开。

生成

  1. 开辟空间(allocate)
  2. 调用构造(construct)

销毁

  1. 调用析构(destroy)
  2. 释放内存(deallocate)

一级空间配置器
alloc和dealloc是对malloc和free做了一个封装

二级空间配置器
自由链表的内存池
alloc从内存池中取,dealloc释放内存给内存池

使用

如果大于128字节,认为开辟内存足够大,不容易产生碎片。就使用一级空间配置器。

如果小于128字节,内存比较小,就容易产生碎片。就是用二级空间配置器。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值