STL

STL

C++标准库的重要组成部分,不仅是一个可复用的组件库,还是一个包含数据结构和算法的软件框架

STL的六大组件

容器

  • 序列式容器:string、vector、list、deque、array(C++11)、forward_list(C++11)
  • 关联式容器:set、multiset、unordered_set、unordered_multiset、map、multimap、unordered_map、unordered_multimap

适配器

  • 适配器有三种:改变容器接口的空间适配器、改变迭代器接口的迭代器适配器、改变仿函数接口的仿函数适配器
  • STL提供了stack、queue、priority_queue三种容器适配器

算法

STL算法有上百种,我们常用算法有sort、find、copy等,从实现的角度来说算法是一种function template(函数模板)

迭代器

  • 迭代器提供一种方法能够访问容器的各个元素,从而不需要暴露容器背部,是容器与算法的粘合剂
  • 从实现的角度来看,迭代器是将operator*、operator->、operator++、operator--、operator==等指针操作重载的class template(类模板)
  • 每种容器都有自己的迭代器,这些迭代器能够了解容器内部的数据结构

仿函数

仿函数是一种行为类似函数,但实际是重载了operator()的类或类模板

#include <iostream>
using namespace std;
class Add
{
public:
	int operator()(int x, int y){
		return x + y;
	}
};
int main()
{
	Add a;
	cout << a(3, 4) << endl;
	return 0;
}
  • 仿函数比一般函数灵活
  • 仿函数有类型识别,可以作为模板参数
  • 仿函数执行速度比一般函数和指针快

空间配置器

负责空间配置、管理、释放

六大组件的关系

  • 容器通过空间配置器获取存储空间
  • 算法利用迭代器向容器获取数据
  • 仿函数协助算法完成不同功能
  • 适配器可以修改容器、迭代器、仿函数的接口

STL缺陷

  • STL库更新慢
  • STL不支持线程安全,需自己加锁,而且锁的粒度比较大
  • STL极度追求效率,导致内部复杂
  • STL的使用会导致代码膨胀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值