zoukankan      html  css  js  c++  java
  • 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)通过仿函数修改排序规则

  • 相关阅读:
    单词
    算法2
    GameplayKit的GKStateMachine用法与实例
    适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
    Swift使用AVAudioPlayer来调节游戏的背景音乐大小
    学好三角学(函数) — SWIFT和JAVASCRIPT游戏开发的必备技能 iFIERO.com
    应用UserDefaults储存游戏分数和最高分
    一步一步图文介绍SpriteKit使用TexturePacker导出的纹理集Altas
    SpriteKit在复制节点时留了一个巨坑给开发者,需要开发者手动把复制节点的isPaused设置为false
    运用GamePlayKit的GKEntity及GKComponent 的iOS游戏开发实例
  • 原文地址:https://www.cnblogs.com/MissZhang-154/p/13271686.html
Copyright © 2011-2022 走看看