• 常用STL:

    • vector

      • 变长数组,倍增的思想
      • 初始化:
      //初始化
      vector<int> a;
      vector<int> a(n);
      vector<int> a[n];
      vector<int> a(n, 0);//长度为n,值为0
      • 操作:
      size() //返回元素个数
      empty() //返回是否为空
      clear() //清空
      front()/back() //返回第一个/最后一个元素
      push_back()/pop_back() //在尾端插入元素/删除元素
      begin()/end() //迭代器
      [] //随机访问
      • 遍历:
      for(int i = 0; i < a.size(); ++ i)
      for(vector<int>::iterator/*auto*/ i = a.begin(); i != a.end(); ++ i)
      for(auto x : a)
      • 黑科技:

        • 支持比较运算,按字典序比较
    • pair

      • 二元组
      • 初始化:
      pair<T, T> p;
      pair<T, pair<T, T>> p;
      p = make_pair(a, b);
      p = {a, b};
      p.first/p.second //第一个元素/第二个元素
      • 黑科技:

        • 也支持比较运算
        • 以first为第一关键字,以second为第二关键字
    • string

      • 字符串
      • 初始化:
      string a = "adfb";
      a += "adf";
      a += 'c';
      • 操作:
      size()/length() //返回字符串长度
      empty() //返回是否为空
      clear() //清空
      substr() //求子串
      a.substr(st, len) //从下标st开始长度为len的子串
      a.substr(st) //从st开始到结尾的子串
      c_str() //返回字符串地址
      //printf()无法输出string,但是可以printf("%s", a.c_str);
    • queue

      • queue

        • 队列
        • 初始化:同数组
        • 操作:
        size()
        empty()
        push() //想队尾插入元素
        pop() //弹出队头元素
        front() //返回队头元素
        back() //返回队尾元素
        //队列没有clear()函数
      • priority_queue
        • 优先队列(堆)
        • 初始化:
        priority_queue<int> heap; //堆默认为大根堆
        heap.push(-x); //将数反号实现小根堆
        priority_queue<int, vector<int>, greater<int> > heap //直接定义小根堆
        • 操作:
        push() //插入一个元素
        top() //返回堆顶元素
        pop() //弹出堆顶元素
    • stack

      • 初始化:同数组
      • 操作:
      size()
      empty()
      push() //向栈顶插入元素
      top() //返回栈顶元素
      pop() //弹出栈顶元素
    • deque

      • 双端队列
      • 初始化:
      • 操作:
      size()
      empty()
      clear()
      front()
      back()
      push_back()/pop_back()
      push_front()/pop_front()
      begin()/end()
      []
      //操作多效率低
    • set

      • set

        • 集合:无重复元素
        • 基于平衡二叉树
        • 操作:
        size()
        empty()
        clear()
        insert() //插入一个数
        find() // 查找一个数
        count() //返回某个数的个数
        erase() //输入一个数x,删除所有x;输入一个迭代器,删除这个迭代器
        lower_bound() //返回大于等于x的最小的数的迭代器
        upper_bound() //返回大于x的最小的数的迭代器
        //增删查改时间复杂度为log(n)
      • multiset
        • 可以有重复元素
        • 操作:同set
      • 以下unoder 都不支持排序有关操作,因为是无序的,不支持lower_bound/upper_bound ,但是增删改查的时间复杂度为O(1),不支持迭代器的加减
      • unordered_set
      • unordered_multiset
    • map

      • map

        • 基于平衡二叉树
        • 元素是pair
      • multimap
        • 操作:
        insert() //插入的数是一个pair
        erase() //输入的参数是pair或者迭代器
        find() map<string, int> a;
        a["adf"] = 1; //支持随机插入/访问,时间复杂度为log(n)
        lower_bound()/upper_bound()
        //增删查改时间复杂度为log(n)
      • 以下unoder 都不支持排序有关操作,因为是无序的,不支持lower_bound/upper_bound ,但是增删改查的时间复杂度为O(1),不支持迭代器的加减
      • unordered_map
      • unordered_multimap
    • bitset

      • 压位

        • bool 类型位一个字节,8位
        • 如:压位将bool 占用内存压缩1/8,使bool类型只占一个二进制位
        • bitset 相当于一个二进制数组,数组里存0/1,一个数组元素占1个二进制位
      • 初始化:
      bitset<10000> s;
      • 操作:
      ~, &, |, ^
      >>, <<
      ==, !=
      []
      count() //返回有多少1
      any() //判断是否至少有一个1
      none() //判断是否全为0
      set() //把所有位置成1
      set(k, v) //将第k位变成v
      reset() //把所有位变成0
      flip() //等价于~
      flip(k) //把第k位取反

常用c++ STL 汇总的更多相关文章

  1. 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)

    前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...

  2. 常用的STL查找算法

    常用的STL查找算法 <effective STL>中有句忠告,尽量用算法替代手写循环:查找少不了循环遍历,在这里总结下常用的STL查找算法: 查找有三种,即点线面: 点就是查找目标为单个 ...

  3. 常用Git命令汇总

    常用Git命令汇总 跟着R哥来到了新公司(一个从硬件向互联网转型中的公司),新公司以前的代码基本是使用SVN做版本控制,甚至有些代码没有做版本控制,所以R哥叫HG做了一次Git分享,准备把公司所有的代 ...

  4. Mysql中常用的函数汇总

    Mysql中常用的函数汇总: 一.数学函数abs(x) 返回x的绝对值bin(x) 返回x的二进制(oct返回八进制,hex返回十六进制)ceiling(x) 返回大于x的最小整数值exp(x) 返回 ...

  5. ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS)

    ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS) 1. 网站资源: ROSwiki官网:http://wiki.ros.org/cn GitHub    ...

  6. React Native常用第三方组件汇总--史上最全 之一

    React Native 项目常用第三方组件汇总: react-native-animatable 动画 react-native-carousel 轮播 react-native-countdown ...

  7. React Native常用第三方组件汇总--史上最全[转]

    本文出处: http://blog.csdn.net/chichengjunma/article/details/52920137 React Native 项目常用第三方组件汇总: react-na ...

  8. 刷题常用的STL容器总结

    本文归纳总结刷题常用到STL容器以及一些标准算法,主要包括: string.vector.map.pair.unordered_map.set.queue.priority_queue.stack,以 ...

  9. js如何操作表格(常用属性方法汇总)

    js如何操作表格(常用属性方法汇总) 一.总结 一句话总结: 二.表格相关的属性和方法 1.1 Table 对象集合 cells[] 返回包含表格中所有单元格的一个数组. 语法:tableObject ...

  10. python-Redis模块常用的方法汇总

    Redes模块常用的方法汇总 一.创建建Redis对象 1.直接使用 import redis r = redis.Redis(host='127.0.0.1', port=6379) 2.连接池使用 ...

随机推荐

  1. UIOTOS:一款无门槛的前端0代码搭建工具

    什么是UIOTOS? UIOTOS中文名称前端大师,是一款基于图形技术的前端0代码工具,支持通过连线和嵌套无门槛来搭建各类复杂的的交互界面,包括后台管理系统.组态数据大屏等,实现跟代码开发媲美的效果. ...

  2. 2023-03-28:有一根长度为 n 个单位的木棍,棍上从 0 到 n 标记了若干位置。 给你一个整数数组 cuts ,其中 cuts[i] 表示你需要将棍子切开的位置, 你可以按顺序完成切割,也可

    2023-03-28:有一根长度为 n 个单位的木棍,棍上从 0 到 n 标记了若干位置. 给你一个整数数组 cuts ,其中 cuts[i] 表示你需要将棍子切开的位置, 你可以按顺序完成切割,也可 ...

  3. 2023-03-27:avio_list_dir.c 是 FFmpeg 库自带的一个示例程序,它提供了列出目录中所有文件和子目录的功能,请用go语言改写。

    2023-03-27:avio_list_dir.c 是 FFmpeg 库自带的一个示例程序,它提供了列出目录中所有文件和子目录的功能,请用go语言改写. 答案2023-03-27: 这段代码实现了通 ...

  4. 2022-09-26:以下go语言代码输出什么?A:{“Time“: “2020-12-20T00:00:00Z“, “N“: 5 };B:“2020-12-20T00:00:00Z“;C:{“N“:

    2022-09-26:以下go语言代码输出什么?A:{"Time": "2020-12-20T00:00:00Z", "N": 5 }:B: ...

  5. vue全家桶进阶之路37:Vue3 路由守卫

    在 Vue.js 3.x 中,我们可以使用路由守卫来拦截路由的跳转,从而实现一些功能,例如:登录验证.页面权限控制等. Vue.js 3.x 中的路由守卫和 Vue.js 2.x 中的基本相同,都包含 ...

  6. protoBuf 实现客户端与服务端

    转载请注明出处: 1.定义消息格式 在 src/main/proto 目录下创建 person.proto 文件,并定义消息格式,例如: syntax = "proto3"; pa ...

  7. 2019年蓝桥杯C/C++大学B组省赛真题(数的分解)

    题目描述: 把2019分解成3个各不相同的正整数之和,并且要求每个正整数都不包含数字2和4,一共有多少种不同的分解方法? 注意交换3个整数的顺序被视为同一种方法,例如1000+1001+18 和100 ...

  8. APP中RN页面渲染流程-ReactNative源码分析

    在APP启动后,RN框架开始启动.等RN框架启动后,就开始进行RN页面渲染了. RN页面原生侧页面渲染的主要逻辑实现是在RCTUIManager和RCTShadowView完成的. 通过看UIMana ...

  9. ArcMap手动新建矢量要素的方式

      本文介绍在ArcGIS下属ArcMap软件中,新建点.线.面等矢量要素图层,并对新建图层的空间范围加以划定的方法.   首先,在右侧"Catalog"栏中选择需要存放新建立矢量 ...

  10. Python潮流周刊#3:PyPI 的安全问题

    你好,我是豌豆花下猫.这里记录每周值得分享的 Python 及通用技术内容,部分为英文,已在小标题注明.(标题取自其中一则分享,不代表全部内容都是该主题,特此声明.) 文章&教程 1.掌握Py ...