STL:标准模板库,它提供了一系列实现了常见数据结构和算法的模板类和函数。
STL的六大组件
容器
用于存放数据
std::string:字符串类,类比容器
std::vector:单端动态数组。支持随机访问,适合频繁访问元素和在序列末尾进行添加和删除元素的场景
std::deque:双端动态数组。支持随机访问,适合频繁在序列首端和尾端的快速添加和删除元素的场景
std::list:双向链表。适合频繁在序列中间插入和删除元素的场景
std::set:集合,键唯一,自动根据键排序。元素本身就是键,且为这些元素排序
std::map:映射,键值对形式,且键唯一,自动根据键排序。键值由使用者在插入元素时明确指定,值也由使用者提供
std::multiset:多重集合,允许键值重复
std::multimap:多重映射,允许键值重复
算法
操作数据,包括搜索、排序、计数、遍历等常见操作。
迭代器(iterator)
连接算法和容器的桥梁。算法借助迭代器来操作数据。
注:迭代器只有++操作,没有--的操作。
这里介绍正向迭代器的成员函数
1.begin():指向容器第一个元素的迭代器
2.end(): 指向容器最后一个元素之后位置的迭代器
设计理念:半开区间 [begin,end)
仿函数:
为算法提供策略。就是重载了()运算符的类,这样类的对象就可以像普通函数那样被调用,因此这种对象被称为仿函数。
operator(),例子如下
//定义一个仿函数类
class Adder
{
public://重载operator(),使得Adder的对象可以像函数那样被调用int operator()(int a, int b) {return a + b;}
};Adder add;
int c=add(1,2);
适配器
主要是为了解决两个接口不兼容的问题,通过包装已有的一个类提供一个新的接口,从而使接口不匹配的类可以协同工作。
适配器的角色组成
- 目标接口:期望使用的接口,它定义了需要的特定领域的接口。
- 需要适配的类:已存在的、需要被适配的类,这个类的接口通常与目标接口不兼容。
- 适配器:适配器类,通过继承或引用需要适配的类,实现目标接口,从而使需要适配的类能够按照目标接口的形式被使用。
空间配置器
为容器和算法管理空间,用于抽象内存的分配和回收。(一般用不上,自己还没到那个水平呢)