STL的三大组件(支柱)
- 容器(Containers): 任何可以存储对象集合的数据结构在 C++ 中都是容器
- 算法(Algorithms):每种语言也有某种形式的算法,算法是用于处理元素序列的函数
- 迭代器(Iterators):容器和算法结合在一起的粘合剂
这三个区域之间没有重叠,容器存储(并拥有)数据,并生成迭代器;迭代器使您可以检查,修改和遍历数据;算法在迭代器范围内运行
STL的灵活性与可拓展性
可以与C代码完美地互操作(指针是合法的迭代器),可以轻松轻松地进行扩展,并且可以定义自己的容器
STL的三个支柱都可以被覆盖或扩展,因此STL可以说是一种设计策略,即使您正在使用,也可以编写STL代码您自己的容器,由于这三大支柱彼此之间是完全分开的,因此与其他将这三大支柱混合的语言相比,它们可以更轻松地移植
容器不必支持所有标准算法,它只需要能够生成一对迭代器,然后所有功能都是免费的
STL的线程安全
切勿对STL容器的线程安全性有不切实际的依赖,STL为了提升效率,对于所有操作没有加锁
一般说来,stl对于多线程的支持仅限于下列两点
- 多个线程读取是安全的,多个线程可以读同一个容器内的数据,读时不允许写操作
- 多个线程对不同的容器写入是安全的
当对同一个容器的多线程写入操作时,可以通过以下操作保证线程安全
- 每次调用容器的成员函数的期间需要锁定
- 每个容器容器返回迭代器的生存期需要锁定
- 每个容器在调用算法的执行期需要锁定
但有时,上述3个方法都无法完全解决线程安全,则需要自己实现类来解决线程安全,参照C++-并发与多线程与C++-线程中的锁