STL之容器初窥

zhyjc6于2020-04-23发布 约6819字·约15分钟 本文总阅读量

STL介绍

为了建立数据结构和算法的一套标准,并且降低其间的耦合(coupling)关系以提升各自的独立性、弹性、交互操作性,C++社群里诞生了STL。

STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。

STL六大组件的交互关系:Container 通过 Allocator 获取数据存储空间,Algorithm 通过 Iterator 操纵 Container 内容,Functor 可以协助 Algorithm 完成不同的策略,Adapter 可以修饰或套接 Functor。

注意:STL不仅包含面向对象的编程,还包含了一种不同的编程模式——泛型编程(generic programming)。

STL的版本很多,常见的有HP STL、PJ STL、 SGI STL等。

在C++标准中,STL被组织为下面的13个头文件:< algorithm >、< deque >、< functional >、< iterator >、< vector >、< list >、< map >、< memory.h >、< numeric >、< queue >、< set >、< stack >和< utility >。

迭代器

理解迭代器是理解 STL 的关键所在。模板使得算法独立于存储的数据类型,而迭代器使算法独立于使用的容器类型。因此,它们都是 STL 通用方法的重要组成部分。迭代器的部分下次再研究,这次就研究容器了。

容器

STL 中容器分为序列式(sequence)和关联式(associative)两种。序列式容器包括:

关联式容器包括:

序列式容器

vector

list

deque

stack

queue

heap算法

priority_queue

slist

关联式容器

所谓关联式容器,实际上就是每个元素都有一个键值key(和一个实值value),根据元素大小将元素插入到对应的位置。没有所谓的头和尾,因此也就没有push_back()、push_front()、pop_back()、pop_front()、begin()、end()等行为。

set

map

multiset

multimap

hashtable

C++11之后将hash_table加入标准中,并改为unordered_+容器名,即hash_set不可用了,取而代之的是unordered_set,其它容器同理。参考:https://stackoverflow.com/questions/1646266/difference-between-hash-map-and-unordered-map

hash_set -> unordered_set

hash_map -> unordered_map

hash_multiset -> unordered_multiset

hash_multimap -> unordered_multimap

参考资料