首页 > 编程语言 >常用c++ STL 汇总

常用c++ STL 汇总

时间:2023-08-03 10:45:31浏览次数:32  
标签:返回 初始化 迭代 STL 元素 汇总 bound c++ back

  • 常用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位取反
      

标签:返回,初始化,迭代,STL,元素,汇总,bound,c++,back
From: https://www.cnblogs.com/moilip/p/17595241.html

相关文章

  • C++11可变模版参数妙用
    //参考:https://blog.csdn.net/wmy19890322/article/details/121427697点击查看代码//创建对象template<typenameT,typename...Args>T*CreateInstance(Args...args){ returnnewT(std::forward<Args>(args)...);}//可变参数模版实现泛化的delegatetemplate<typena......
  • C++入门到放弃(07)——构造函数和析构函数
    ​1.构造函数和析构函数是什么1.1构造函数通常一个类,其内部包含有变量和函数,当我们想要使用类的时候,总是会不得不面临这样一个问题,需要对类进行初始化,否则内部这些变量就会是随机值,导致程序出现异常。为此,我们需要在使用类之前对它进行初始化,C++就提供了这样一类特殊的函数——......
  • PHP设计模式汇总
    PHP设计模式汇总没想到啊,没想到。自己竟然坚持了下来,完成了设计模式深入的学习,并且输出了23篇用php演示的设计模式的文章。但这不是最主要的,更深层次的收获是顺便背下了这些模式的定义及类图。在深入学习了设计模式之后,对Laravel等框架的架构理解也更清楚明了了。就像我在很多模式......
  • 20.STL中list与queue之间的区别
    20.STL中list与queue之间的区别std::list和std::queue是C++标准库中的两个不同容器,它们之间有以下几点区别:容器类型:std::list是一个双向链表,而std::queue是一个队列,可以使用多种实现方式(如顺序容器、优先队列等)。插入和删除元素:在std::list中,可以在任何位置插入和删......
  • C和C++进阶的学习笔记总结目录
    C语言–C语言基础知识积累记录学习教程:参考C++教程网之跟我一起学Cdo{…}while(0)的用途汇总(欢迎补充)在一些Linux内核和其它的开源代码中可见到【C语言】《带你学C带你飞》,笔记:链接––C++–一张图总结GoogleC++编程规范(GoogleC++StyleGuide)C++基础学习目录总结参考:链......
  • 13.STL迭代器如何实现
    13.STL迭代器如何实现1.迭代器是一种抽象的设计理念,通过迭代器可以在不了解容器内部原理的情况下遍历容器,除此之外,STL中迭代器一个最重要的作用就是作为容器与STL算法的粘合剂。2.迭代器的作用就是提供一个遍历容器内部所有元素的接口,因此迭代器内部必须保存一个与容器相关联的......
  • 17.STL中unordered_map(hash_map)和map的区别,hash_map如何解决冲突以及扩容
    17.STL中unordered_map(hash_map)和map的区别,hash_map如何解决冲突以及扩容1.区别1.1需要引入的头文件不同map:#include<map>unordered_map:#include<unordered_map>1.2内部实现机理不同map:map内部实现了一个红黑树(红黑树是非严格平衡二叉搜索树,而AVL是严格平衡二......
  • 8.STL的两级空间配置器
    8.STL的两级空间配置器为什么有适配器?(1)小块内存带来的内存碎片问题单从分配的角度来看。由于频繁分配、释放小块内存容易在堆中造成外碎片(极端情况下就是堆中空闲的内存总量满足一个请求,但是这些空闲的块都不连续,导致任何一个单独的空闲的块都无法满足这个请求)。(2)小块内存频......
  • c++11 std::condition_variable
    std::condition_variable需要配合unique_lock使用,wait(unique_lock<mutex>&)notify_one()调用时,只有随机一个wait()线程会得到通知notify_all(),所有wait()线程会被通知并得到执行wait()调用会阻塞当前线程wait()线程中用到的unique_lock不会阻塞notify线程中的锁//condit......
  • 1.什么是STL?
    1.什么是STL?C++STL从广义来讲包括了三类:算法,容器和迭代器。算法包括排序,复制等常用算法,以及不同容器特定的算法。容器就是数据的存放形式,包括顺序容器和关联式容器,顺序式容器就是list,vector等,关联式容器就是set,map等。在C++中,迭代器是一种用于遍历容器中元素的通用机制。它类......