C++标准模板库STL

C++重载操作符

this指针

lambda表达式(匿名函数)

STL源码剖析

  • traits

  • allocator原理:比如16个自由链表是怎么回事,是如何向内存池申请内存的,容量不够时是如何扩容的?

  • 各个容器的底层原理,这是重点!还要知道,在具体场景下,如何选择哪些容器,可选的多种容器里,各个容器的性能如何?像map和set底层的红黑树的原理,哈希表的原理,deque的原理等等

  • 仿函数:这部分篇幅很小,看起来相对轻松

  • 迭代器:要结合和容器,理解各种迭代器的底层原理

  • 算法:需要知道常用的算法,还需要了解Lambda表达式,因为算法常常结合Lambda一起使用

一、STL六大部件:

stl

STL 是“Standard Template Library”的缩写,中文译为“标准模板库”。

Container 通过 Allocator 取得数据储存空间
Algorithm 通过 Iterator 存取 Container 内容
Functor 可以协助 Algorithm 完成不同的策略变化
Adapter 可以修饰或套接 Functor、Iterator。

1. 容器(containers):

中文标准库:容器库

转载:容器类讲解

转载:容器复杂度

转载:C++STL中常用容器优缺点

容器库是STL内部封装好的数据结构,是一种class template。

1.1.序列容器:array、vector、list、deque、forward_list

  • 1.1.1.array、vector和数组

array

vector

数组、array和vector三者的区别和联系

  • 1.1.2.list

list和forward_list

  • 1.1.3. deque

deque

1.2.关联容器

  • 1.2.1map set tuple pair

map的元素是pair

tuple是一个固定大小的不同类型值的集合,是泛化的std::pair,tuple可以用于函数返回值多个的时候,和pair不同的是,pair只有两个元素,而tuple可以有多个元素(不限于两个)

tuple

pair

map、multimap、unordered_map(hash_map)

set、multiset、unordered_set(hash_set)

2. 算法(algorithm):

是一种function template,常用的有sort、search、copy等,STL中算法与数据相分离(不像面向对象中将算法与数据封装在class中)。

中文标准库:算法库

algorithm

3. 迭代器(iterator):

类似于泛化的指针,用来访问可迭代序列。

迭代器:iterator

const_iteratoriterator以及头文件iterator
cbegin、cend,crbegin、crend都是const型的迭代器,它们不能修改容器的值

const_iterator可以用于const型的容器或非const的容器,它自身的值可以改(可以指向其他元素),但不能改写其指向的元素值

4. 适配器(adapter):

提供转换操作,有容器适配器、仿函数适配器、迭代器适配器。

栈stack

5. 分配器(allocator):

负责空间配置与管理,用以支持容器。是一种class template。

6. 仿函数(functor):

行为类似函数,就是使一个类的使用看上去像一个函数。它的具体实现就是通过在类中重载了operator(),使这个类具有了类似函数的行为。

中文标准库:functional头文件

仿函数:functional

常见typedef

下表显示了顺序容器和关联容器中常用的typedef,这些typedef常用于变量、参数和函数返回值的一般性声明

类型别名 描述
value_type 容器中存放元素的类型
reference 容器中存放元素类型的引用
const_reference 容器中存放元素类型的常量引用,这种引用只能读取容器中的元素和进行const操作
pointer 容器中存放元素类型的指针
iterator 指向容器中存放元素类型的迭代器
const_iterator 指向容器中存放元素类型的常量迭代器,只能读取容器中的元素
reverse_iterator 指向容器中存放元素类型的逆向迭代器,这种迭代器在容器中逆向迭代
const_reverse_iterator 指向容器中存放元素类型的逆向迭代器,只能读取容器中的元素
difference_type 引用相同容器的两个迭代器相减结果的类型(list和关联容器没有定义operator - )
size_type 用于计算容器中项目数和检索顺序容器的类型(不能对list检索)

二、std::string

string Cstring QString string.h

转载:何为STL

原文地址:https://www.cnblogs.com/mmmmmmmmm/p/14638978.html