C++提高 STL认识

容器、算法、迭代器

STL标准模板库使用要包含头文件

      STL是一些容器的集合,这些容器在算法的支持下使程序开发变得更加简单和高效。

1)容器

  1)string

  2)vector

    vector存放内置数据类型----可以理解为数组类型

    容器:vector

    算法:for_each

    迭代器:verctor<int>::interator

    增删改查:

      1)增:尾插push_back()  insert()

      2)删:尾删pop_back()  erase() clear()

      3)改:

      4)查:empty() size() capacity()

    1)swap()

      接口:v1.swap(v2)交换v1和v2的数据-----巧用可以节省内存空间

          如:vector<int>(v).swap(v1)--------v为匿名对象,交换之后运行完本行编译器自动释放内存(本质上是交换指针)

    2)reserve()

      --预留空间,若开始知道数据量很大,用reserve节省每次开辟空间的过程(如10000个数据量,需要开辟24次空间动态拓展)

  3)deque

    功能---双端数组,可以对头端进行插入删除操作

    1)与vector区别(与数据结构有关)--deque内部有个中控器(用来维护每个缓冲区的地址,缓冲区中存放真实数据)

        1)vector对于头部的插入效率低,数据量越大,效率越低,deque相对而言,对头部的插入删除速度比vector快

        2)vector访问元素时的速度比deque快

        3)deque没有容量的概念

    2)增删改查:

      1)增:尾插push_back()  头插 push_front()  insert()--提供迭代器

      2)删:尾删pop_back()   头删pop_front()   erase()--提供迭代器  clear()

      3)查:empty() size()

      4)存取:at()  operator[]  front() back()

      5)排序:sort()-----算法(通用)----标准算法头文件(algorithm)

   4)stack(栈)

      不支持迭代操作

   5)queue(队列)

   6)list(双端链表)

      自定义数据类型排序要指定排序规则

  7)set/multiset(集合)关联式容器----二叉树实现

      特点:所有元素都会在插入时自动被排序

      set---不允许有重复的元素,multiset---允许包含重复的元素

      1)插入数据 --- 只有insert的方式 

      2)对于set而言,count统计的结果为0/1

      3)set插入数据时,会返回插入结果返回值类型为pair<iterator,bool>(成对出现) 

        multiset插入时,返回值类型为iterator代表位置;

      4)pair对组创建

        1)pair<type type> 变量名 (值1,值2);

        2)pair<type, type>变量名 = make_pair(值1,值2);

      5)set容器排序

        set默认排序规则为升序,利用仿函数技术,可以改变排序规则

          在插入数据之前就改变排序规则

          仿函数:本质上是一个类,通过重载()达到仿函数

              例:class MyCompare

                {

                public:

                  bool operator()(int v1, int v2)

                    {

                      return v1 > v2;  

                    }

                }

        1)set存放内置数据类型情况

            set<int, MyCompare>s;----MyCompare--自定义排序规则,仿函数

        2)set存放自定义数据类型情况

            ----自定义数据类型都要指定排序规则,不然编译器不知道如何排序

  8)map/multimap--关联容器--底层结构使用二叉树实现

      map中所有元素都为pair<key, value>

      所有的元素都会根据元素的key值自动排序

      优点:根据key值快速找到value值(类似于字典)

      map--不可以有重复key值,multimap--可以有重复key值

      1)insert(piar<type,type>(value1,value2))

      2)通过仿函数修改排序规则

原文地址:https://www.cnblogs.com/MissZhang-154/p/13271686.html