当前位置:   article > 正文

C++ STL简介

c++ stl

目录

一、STL的概念

二、STL的六大组件

三、STL的缺陷


一、STL的概念

STL 是指标准模板库(Standard Template Library)的缩写。它是 C++ 的一个标准库,提供了许多通用的模板类和函数,用于实现常用的数据结构和算法。STL 是 C++ 中广泛使用的一个库,被认为是 C++ 的核心之一。

二、STL的六大组件

  1. 容器(Containers):包括向量(vector)、列表(list)、双端队列(deque)、栈(stack)、队列(queue)、优先队列(priority_queue)、集合(set)、映射(map)等,用于存储和管理数据。

  2. 迭代器(Iterators):提供了一种访问容器中元素的通用方式,包括输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器。

  3. 算法(Algorithms):包括排序、查找、遍历、修改、复制、合并、反转、旋转等常用算法。

  4. 仿函数(函数对象)(Functors):是可调用对象,可以像函数一样使用,用于定制算法的行为。

  5. 空间配置器(Allocator):用于管理动态内存的分配和释放。

  6. 适配器(Adapters):用于将容器或函数对象转换成其他类型,以适应不同的需求。包括容器适配器(如栈和队列的适配器)、迭代器适配器(如反向迭代器和插入迭代器)和函数适配器(如绑定器和取反器)。

三、STL的缺陷

  1. STL库的更新太慢了。上一版靠谱是C++98,中间的C++03基本一些修订。C++11出来已经相隔了13年,STL才进一步更新。
  2. STL现在都没有支持线程安全。并发环境下需要我们自己加锁。且锁的粒度是比较大的。
  3. STL极度的追求效率,导致内部比较复杂。比如类型萃取,迭代器萃取。
  4. STL的使用会有代码膨胀的问题,比如使用vector/vector/vector这样会生成多份代码,当然这是模板语法本身导致的。

四、选择STL容器的基本原则

        1)除非有很好的理由选择其他容器,否则使用vector是最好的选择。

        2)如果程序有很多小元素且空间的额外开销很重要,不要使用listforward_list

        3)要求随机访问元素,应该使用vectordeque

        4)要求中间插入或删除元素,应该使用listforward_list

        5)要求在头尾插入或删除元素,且中间不进行插入或删除,应该使用deque

        6)如果只在读取输入时才需要在容器中间位置插入元素,随后需要随机访问元素。首先可以考虑在读取输入时使用vector,再调用sort函数重排容器中的元素,从而避免在中间位置添加元素。如果必须在中间位置插入元素,考虑在输入阶段使用list,输入完成将list拷贝到vector中。

注意:如果实在不确定使用哪种容器,可以在程序中只使用vector和list的公共操作迭代器而非下标,避免随机访问。这样可以在必要时选择使用vector或list。 

五、STL容器的概要

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/589559
推荐阅读
相关标签
  

闽ICP备14008679号