STL

    xiaoxiao2023-11-09  154

    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的使用会导致代码膨胀

    最新回复(0)