首页 > 其他分享 >STL常用容器

STL常用容器

时间:2022-10-06 20:35:00浏览次数:50  
标签:容器 常用 end 迭代 STL 元素 back queue vector

常用STL

一.queue

简介: 是最常用的STL容器,需要加 <queue> 头文件

可用函数:

1.size //大小
2.empty //是否为空
3.push //队尾插入
4.pop //队首取出
5.front //队头元素
6.back //队尾元素    

均可通过 " . + 函数名" 调用。

二.stack

简介: 是最常用的STL容器,需要加 <stack> 头文件

可用函数:

  1. size //大小
  2. empty //是否为空
  3. push //栈顶插入
  4. pop //栈顶取出
  5. top //栈顶元素

三.priority_queue

简介: 一个大/小根堆(默认大根堆), 需加 <queue> 头文件

1.可用函数:

  1. size //大小
  2. empty //是否为空
  3. push //堆插入
  4. pop //堆顶取出
  5. top //堆顶元素

2.关于priority_queue中元素的比较:

模板申明带3个参数:priority_queue <Type, Container, Functional>,其中Type 为数据类型,Container为保存数据的容器,Functional 为元素比较方式。

  Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector。

如果缺省后两个参数, 则默认大根堆。

3.将大根堆转化为小根堆

  • 将三个参数全部填上, STL里面定义了一个仿函数greater<>,基本类型可以用这个仿函数声明小顶堆。
priority_queue<int, vector<int>, greater<int> > q; //一个小根堆
  • 使用 pair 类型, pair 中first存所需比较元素的相反数,second中存放需要元素。
priority_queue < pair<int, int> > q;
  • 使用结构体重载小于号转化,此方法可以存较多元素, 实现较复杂的操作。
struct node
{
    int x;
    bool operator < (const node & b) const
    {
        return x > b.x; //将小于号重载为大于号即可
    }
};

priority_queue <node> q;

四.deque

简介: 一个双端队列, 需加 <deque> 头文件

可用函数:

  1. [] //随机访问
  2. begin/end //头/尾 迭代器
  3. front/back //头/尾 元素
  4. push_back //从队尾插入
  5. push_front //从队头插入
  6. pop_back //从队尾出队
  7. pop_front //从队头出队
  8. clear //将队列清空

五.vector

简介: 一个长度可变的数组, 需加 <vector> 头文件

1.可用函数:

  1. [] //随机访问
  2. size //大小
  3. empty //是否为空
  4. clear //将vector清空
  5. begin/end //头/尾 迭代器
  6. front/back //头/尾 元素
  7. push_back/pop_back //从尾插入/删

2.对vector中元素进行逐个访问:

使用iterator、auto 或 下标

vector <int> vec;
for (vector <int> ::iterator it = vec.begin(); it != vec.end(); ++ it)
{
    cout << *it << endl; 
}

for (auto a : vec)
{
    cout << a << endl;
}

for (int i = 0; i < vec.size(); ++ i)
{
    cout << vec[i] << endl;
}

五.set(multiset)

简介: 一个集合(封装好的平衡树(红黑树)), 需加 <set> 头文件

副: set 为有序集合, multiset 为有序多重集合, unordered_set(基于Hash表) 很少用,故不多赘述。

可用函数:

  1. size //大小

  2. empty //是否为空

  3. clear //将集合清空

  4. begin/end //头/尾 迭代器

  5. front/back //头/尾 元素

  6. insert //向集合中插入元素,时间复杂度$ O(log{n}) $ (副: multiset 可以重复插入元素)

  7. find // s.find(x)会于集合中查找等于x的元素,并返回指向该元素的 迭代器 , 若不存在,则返回 s.end(), 时间复杂度$ O(log{n}) $

  8. lower_bound/upper_bound //用法与find类似。

    s.lower_bound(x) 查找 $\geqslant x $ 的元素中最小的, 并返回指向该元素的迭代器

    s.upper_bound(x) 查找 $> x $ 的元素中最小的, 并返回指向该元素的迭代器

  9. erase // 删除

    设it为一个迭代器, s.erase(it) 从s中删除迭代器it指向的元素, 时间复杂度$ O(log{n}) \( 设x为一个元素, s.erase(x) 从s中删除所有等于x的元素, 时间复杂度\) O(k + log{n}) $ (k 为被删除的元素个数)
    如果想从multiset中删除掉至多1个等于x的元素,可以执行

    if((it = s.find(x)) != s.end()) s.erase(it);
    
  10. count // s.count(x) 返回集合s中等于x的元素个数, 时间复杂度$ O(k + log{n}) $ (k 为元素x的个数)

六. map(unordered_map)

简介: 一个键值对kay-value的映射(实现为一棵以key为关键码的红黑树)。map的key和value可以是任何类型, 其中k必须定义“\(<\)”运算符

副: multimap 与 map 的区别类似与 multiset 和 set, 只是在能否重复上不同,故不多赘述。

1.可用函数:

  1. size //大小
  2. empty //是否为空
  3. clear //将集合清空
  4. begin/end //头/尾 迭代器
  5. insert/erase // 插入/删除 与set类似, insert的参数为 pair <key_type,value_type>, erase的参数可以为pair或迭代器
  6. find // h.find(x) 在名为h的map中查找key为x的二元组, 并返回指向该二元组的迭代器。 若不存在,则返回 h.end()。时间复杂度$ O(log{n}) $
  7. "[ ]"操作符 //

标签:容器,常用,end,迭代,STL,元素,back,queue,vector
From: https://www.cnblogs.com/Eakang/p/16758404.html

相关文章

  • 移动端网页特效及常用插件
    一、触屏事件(一)触屏事件概述1、移动端浏览器兼容性较好,我们不需要考虑以前JS的兼容性问题,可以放心的使用原生JS书写效果,但是移动端也有自己独特的地方。比如触屏事件tou......
  • Hadoop常用端口号
    端口名称Hadoop2.xHadoop3.xNameNode内部通信端口8020/90008020/9000/9820NameNodeHTTPUI500709870MapReduce查看执行任务端口80888088历史服......
  • Hadoop常用配置文件
    Hadoop3.xcore-site.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xmlworkersHadoop2.xcore-site.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xmlslavesTR......
  • 常用Dos命令
    常用Dos命令:#盘符切换:D:#查看当前目录下的所有文件: dir#切换目录: cd#返回上一级目录:cd..#退出到磁盘根目录:cd\#清理屏幕: cls(clearscreen)#退出终端: ......
  • 不同容器特点(后续补充)
    map:特点:有序,因为是红黑树实现的。包含一对键对值,当桶用很方便,还可以储存负数的桶unordered_map:特点:无序,键对值,在查找方面效率很高,因为是哈希表实现的。set:特点:有序,集合......
  • 常用的广告拦截插件
    一、AdGuard广告拦截器​ AdGuard广告拦截器是一款可以对抗各式广告的拦截插件,该插件可以拦截包括视频广告、浮动广告以及插播广告在内的绝大部分常见的网站广告。该......
  • .NET CORE IOC容器和AutoFace 的用法
    一IOC默认的IOC的三种注入方式  通过构造函数获取到实例          二IOC默认的IOC的三种注入方式......
  • python 数据容器
    python中的数据容器一种可以容纳多份数据的数据类型,容纳的每一份数据称之为一个元素,每个元素,可以是任意类型的数据,如字符串,数字,布尔等。数据容器更具特点不同,如:是否支......
  • 16第十五章:Docker容器监控
    一、Docker查看信息命令原生命令dockerstats命令的结果存在问题通过dockerstats命令可以很方便的看到当前宿主机上所有容器的CPU,内存以及网络流量等数据,但是......
  • Linux常用命令整理
    Linux目录树常见目录说明:/bin:存放二进制可执行文件(ls、cat、mkdir等),常用命令一般都在这里;/etc:存放系统管理和配置文件;/home:存放所有用户文件的根目录,是用户主......