zoukankan      html  css  js  c++  java
  • C++学习笔记STL(Standard Template Library)标准模板库-容器(一)

    一、STL简介

    STL标准模板库或者泛型库,其包含大量模板类和模板函数,C++提供的一个基础模板的集合,用于完成输入/输出,数据计算等功能。

    STL的基本组成(6大组件+12个头文件)

    STL:是容器、算法、迭代器、函数对象、适配器、内存分配器六大组件

    STL的组成含义
    容器 一些封装数据结构的模板类,例如 vector 向量容器、list 列表容器等。
    算法 STL 提供了非常多(大约 100 个)的数据结构算法,它们都被设计成一个个的模板函数,这些算法在 std 命名空间中定义,其中大部分算法都包含在头文件 <algorithm> 中,少部分位于头文件 <numeric> 中。
    迭代器 在 C++STL 中,对容器中数据的读和写,是通过迭代器完成的,扮演着容器和算法之间的胶合剂。
    函数对象 如果一个类将 () 运算符重载为成员函数,这个类就称为函数对象类,这个类的对象就是函数对象(又称仿函数)。
    适配器 可以使一个类的接口(模板的参数)适配成用户指定的形式,从而让原本不能在一起工作的两个类工作在一起。值得一提的是,容器、迭代器和函数都有适配器。
    内存分配器 为容器类模板提供自定义的内存申请和释放功能,由于往往只有高级用户才有改变内存分配策略的需求,因此内存分配器对于一般用户来说,并不常用。
    表 2 C++ STL头文件
    <iterator> <functional> <vector> <deque>
    <list> <queue> <stack> <set>
    <map> <algorithm> <numeric> <memory>
    <utility>      

    二,容器库

    是类模板与算法的汇集,,允许程序员简单地访问常见数据结构,例如队列、链表和栈。有三类容器——顺序容器、关联容器和无序关联容器——每种都被设计为支持不同组的操作。

    容器管理为其元素分配的存储空间,并提供直接或间接地通过迭代器(拥有类似指针属性的对象)访问它们的函数。

    大多数容器拥有至少几个常见的成员函数,并共享功能。特定应用的最佳容器不仅依赖于提供的功能,还依赖于对于不同工作量的效率。

    1)顺序容器:实现能按顺序访问的数据结构,包括

    array(静态连续数组);

    vector(动态的连续数组);

    deque(双端队列);

    forward_list(单链表);

    list(双链表)

    2)关联容器:实现能快速查找(O(log n)复杂度)的数据结构。

    set (唯一键的集合,按照键排序)

    map(键值对的集合,按照键排序,键是唯一的);

    multiset(键的集合,按照键排序)

    multimap(键值对的集合,按照键排序)

    3)无序关联容器:提供能快速查找(均O(1)最坏O(n)的复杂的)的无语(哈希)数据结构。

    unordered_set(键的集合,按照键生成散列)

    unordered_map(键值对的集合,按照键生成散列,键是唯一的);

    unordered_multiset(键的集合,按照键生成散列)

    unordered_mulitimap(键值对的集合,按照键生成散列)

    4)容器适配器:提供顺序容器的不同接口

    stack(适配一个容器以提供栈(LIFO 数据结构)

    queue适配一个容器以提供队列(FIFO 数据结构)

    priority_queue适配一个容器以提供优先级队列

    span是相接的对象序列上的非占有视图,某个其他对象占有序列的存储。

  • 相关阅读:
    Java weak reference
    Java 代理模式
    Eclipse 代码自动提示
    Eclipse 设置默认编码为Utf-8
    MyBatis 作用域(Scope)和生命周期
    MyBatis 命名空间与命名解析
    Java 泛型 介绍
    【总结】过去的风口让很多人改变了阶层,我们90后的下一个风口会是什么?
    【前端】js截取or分割字符串的常见方法
    基于react/vue的移动端终极适配方案vw单位(更新css-modules配置)
  • 原文地址:https://www.cnblogs.com/qq964107326/p/15037024.html
Copyright © 2011-2022 走看看