zoukankan      html  css  js  c++  java
  • 7.STL

    一、什么是STL
     STL是standart template library,标准模板库。
     是HP实验室开发的一系列软件的统称,从根本上来说,它是一些容器和算法的集合,它是世界上很多最聪明的程序员多年的杰作。
     STL是标准化的组件,不用重新开发,可以直接使用,它是C++的一部分,不需要额外安装。
     
    二、STL中有什么
     1、容器
      存储类对象的盒子。
      线性容器:vector、list
      容器适配器:queue、stack、double queue
      关系型容器:set、map、
     
     2、算法
      #include <algorithm>
      find sort
     
     3、迭代器
      迭代器是一个类,它实现于容器模板中。
      它的对象是一个指向容器中的一个元素,它实现的*运算符,给人的感觉它好像是个指针。
      从容器中获取到迭代器是一个半开半闭区间[start,end)。
     
    三、vector容器
     1、特点:
      a、占用的是连续的内存
      b、动态的管理内存
      c、支持随机访问(at,[])。
      d、支持按迭偌器进行插入和删除(inster,erase)
       但只有在末尾添加和删除时效率才最高。
      e、支持随机迭代:it=it+4;
     
     2、定义
      vector<类型> a; // 创建容器,
      vectro<类型> a(10); // 创建容器并设置容量为10,把元素初始化为0
      vector<类型> a(10,1);// 创建容器并设置容量为10,并设置初始值
     
     3、返回值
      v[i]、v.at(i)、v.front()、v.back()这种方式返回的是元素的引用。
     
     4、成员函数
    1   void assign( input_iterator start, input_iterator end);
    2   void assign( size_type num, const TYPE &val);

     1  
     2   size_type capacity(); //获取容器在扩充之后的容量
     3  
     4   iterator erase( iterator loc );
     5     iterator erase( iterator start, iterator end );
     6  
     7   iterator insert( iterator loc, const TYPE &val );
     8     void insert( iterator loc, size_type num, const TYPE &val );
     9     void insert( iterator loc, input_iterator start, input_iterator end );
    10  
    11   // 元素被删除或插入之后,之前的获取的迭代器就失效,需要重新获取。
    12  void resize( size_type size, TYPE val );
    13  //改容器的大小,可以调大(构造),也可以调小(析构)。
     
     
     5、运算符
      ==、!=、>=、<=、>、<
      比较两人个容器中元素的数量、顺序、值是否相等。
      容器中存储的对象的==运算符必须要重载。
     
     
     6、排序、查找
      在vector容器中是没有排序和查找成员函数。
      在List容器中由于这是链式的存储结构所有不能使用全局的sort函数,必须自己实现。
      在使用sort排序时,待排序的对象必须实现出<的重载(或者给sort提高比较函数)。
     
     7、自定义类使用容器时需要实现的成员有
      无参构造、拷贝构造
      == <
     
    四、set容器
     集合容器,里面的元素不会重复,它会自动排重。
     使用时要实现它的==运算符。
     
     multiset 允许有重复的数据。
     
    1  pair equal_range( const key_type &key );
    2  查找值等于key的元素信息,返回两人个迭代器。
    3  
    4  iterator lower_bound( const key_type &key );
    5  查找大于等于key的第一个元素
    6  
    7  iterator upper_bound( const key_type &key );
    8  查找大于key的第一个元素
    9  
    五、队列
     单向队列:
      back、empty、front、pop、push、size
     双向队列:
     
    六、List
     是一种链式存储结构,不能使用算法库中的排序,只能调用自带的排序函数。
     
     1  void unique();
     2  void unique( BinPred pr );
     3  删除重复的元素。
     4  
     5  void splice( iterator pos, list &lst );
     6    void splice( iterator pos, list &lst, iterator del );
     7    void splice( iterator pos, list &lst, iterator start, iterator end );
     8  从指定的位置开始合并两个链表
     9  
    10  
    11  void merge( list &lst );
    12    void merge( list &lst, Comp compfunction );
    13  直接合并两人个链表
     
    七、map是一种关联式的容器
     它底层以采用的是红黑树(有序+平衡)进行存储的。
     一个键值(主键)只能对应一个值。
     
     multimap 多重映射
     键值可以重复
     
    八、priority_queue优先队列
     元素在入队后就已经排序好了,最大值在上面。
     对元素排序依靠的是 < 运算符。
     
     
     
     
     
     
  • 相关阅读:
    可扩展设计的三个维度
    今天用批处理脚本遇到的两个问题
    响应式编程学习记录
    ThreadLocal使用注意
    JDK8 函数式接口
    Java多线程相关的常用接口
    java异步编程
    java多线程同步器
    paramiko获取远程主机的环境变量
    python为不同的对象如何分配内存的小知识
  • 原文地址:https://www.cnblogs.com/LyndonMario/p/9524346.html
Copyright © 2011-2022 走看看