这是我第一次用Markdown来写东西,先纪念一下~

这篇博客就先把常用的STL容器记一下,方便以后查阅。

Vector

vector其实就是可变长度的数组,特点就是随机访问的效率高O(1),但删除和中间插入是O(n)

定义

例子 说明
vector <数据类型> a; 最基本的定义方式,a为空
vector <数据类型> b(a); 用a来初始化b
vector <数据类型> c(num1,num2); 使容器内有num1个值为num2的元素

常用操作

功能 例子 说明
赋值 a.push_back(100); 在尾部添加一个元素
元素个数 int size = a.size(); 返回元素个数
判断是否为空 a.empty() 如果为空,返回真;否则返回假
打印 cout<<a[0] vector支持像数组一样输出
中间插入 a.insert(a.begin()+i,k) 向第 i 个元素前加入值为k的元素
尾部插入 a.insert(a.end(),num1,num2) 向尾部插入 num1 个值为 num2 的元素
删除尾部 a.pop_back() 删除最后一个元素
删除区间 a.erase(a.begin()+i,a.begin()+k) 删除区间 [ i , j - 1 ] 的元素
删除元素 a.erase(a.begin()+i) 删除第 i+1 个元素
调整大小 a.resize(n) 调整a的大小到n
清空 a.clear() 清空
反转 reverse(a.begin(),a.end()) 反转整个数组
排序 sort(a.begin(),a.end()) 从小到大排序

list —— 链表

特点:随机访问效率低,插入删除效率高。和vector算是相反的。

函数基本同vector

Stack —— 栈

栈的特点:“先进后出”

定义与操作

写在一起是因为栈的操作的确少

功能 例子
定义一个栈 stack <数据类型> a
向栈中压入元素 a.push(item)
返回栈顶的元素 a.top()
弹出栈顶的元素 a.pop()
返回栈中的元素个数 a.size()
检查栈是否为空;空则返回true a.empty()

queue —— 队列

队列的特点:“先进先出”

定义与操作

和栈一样操作很少

功能 函数
定义一个队列 queue<数据类型> q
一个元素进队 q.push(item)
返回队首的元素 q.front()
删除队首的元素 q.pop()
返回队尾的元素 q.back()
返回队列中元素个数 q.size()
检查队列是否为空 q.size()

优先队列 —— priority_ queue

操作基本等同于队列,不过它是队列与排序的结合。它总是处在优先级从高到底的排好序的状态。

也就是说,它的队首元素永远是优先级最高的元素。

在不自定义优先级的状态下,队首元素是队列中最大的元素。

set —— 集合

特点:自动去重,自动排序,查找速度快(二叉树实现O(logn))

功能 函数
定义一个set set<数据类型> s
插入一个元素 s.insert(item)
删除一个元素 s.erase(item)
清空set s.clear()
判断是否为空 s.empty()
返回元素个数 s.size()
查找一个元素(返回迭代器 )
若未找到返回s.end()
s.find(x)
查找不小于k的第一个元素
(返回迭代器)
s.lower_bound(k)
查找大于k的第一个元素
(同上)
s.upper_bound(k)

multiset

基本同set,但不同的是它不去重,可以统计一个元素的次数

功能 例子
查找k出现了多少次 int a=s.count()

set里也可以使用,不过返回值就只有0和1两种

map

特点:实现了一种映射,可以从一个值找到另一个值,比如给定一个学生的姓名,求其学号这样的。

和set一样查找速度很快,也去重,自动按键值排序。

功能 例子
定义map map<键值 ,对应的值> m
赋值 m["tom"]=15
查找 int tom_age=m["tom"]
查找(返回迭代器)
未找到返回m.end()
iter=m.find("tom")
输出(迭代器) cout<<iter->first<<iter->second
删除 m.erase("tom")
删除(迭代器) m.erase(iter)

没写的很多操作都是同set。

STL与基本数据结构的更多相关文章

  1. STL容器底层数据结构的实现

    C++ STL 的实现: 1.vector      底层数据结构为数组 ,支持快速随机访问   2.list            底层数据结构为双向链表,支持快速增删   3.deque     ...

  2. C++ STL 的底层数据结构实现

    C++ STL 的实现:   1.vector      底层数据结构为数组 ,支持快速随机访问   2.list            底层数据结构为双向链表,支持快速增删   3.deque    ...

  3. (使用STL中的数据结构进行编程7.3.15)UVA 630 Anagrams (II)(求一个单词在字典中出现的次数)

    /* * UVA_630.cpp * * Created on: 2013年11月4日 * Author: Administrator */ #include <iostream> #in ...

  4. 第一周训练 | STL和基本数据结构

    A - 圆桌问题: HDU - 4841 #include<iostream> #include<vector> #include<stdio.h> #includ ...

  5. 数据结构(DataStructure)与算法(Algorithm)、STL应用

    catalogue . 引论 . 数据结构的概念 . 逻辑结构实例 2.1 堆栈 2.2 队列 2.3 树形结构 二叉树 . 物理结构实例 3.1 链表 单向线性链表 单向循环链表 双向线性链表 双向 ...

  6. 详细解说 STL 排序(Sort)

    0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...

  7. stl 迭代器(了解)

    STL 主要是由 containers(容器),iterators(迭代器)和 algorithms(算法)的 templates(模板)构成的. 对应于它们所支持的操作,共有五种 iterators ...

  8. STL之vetor 排序

    1 STL提供的Sort 算法 C++之所以得到这么多人的喜欢,是因为它既具有面向对象的概念,又保持了C语言高效的特点.STL 排序算法同样需要保持高效.因此,对于不同的需求,STL提供的不同的函数, ...

  9. 对vector等STL标准容器的排序操作

    [+] STL提供的Sort 算法 所有sort算法介绍 sort 中的比较函数 sort 的稳定性 全排序 局部排序 nth_element 指定元素排序 partition 和stable_par ...

随机推荐

  1. OpenCV3入门(九)图像几何变换

    1.图像缩放 假设图像x轴的缩放因子Sx, y轴方向的缩放因子Sy,相应的变换表达式为: 函数原型为: CV_EXPORTS_W void resize( InputArray src, Output ...

  2. 深入理解JVM(学习过程)

    这,仅是我学习过程中记录的笔记.确定了一个待研究的主题,对这个主题进行全方面的剖析.笔记是用来方便我回顾与学习的,欢迎大家与我进行交流沟通,共同成长.不止是技术. 2020年02月06日22:43:0 ...

  3. VFP 图形文件与剪切板互换的API解决方法

    在 VFP 中,凡遇图形处理,大多数情况下,都会涉及到图形文件与剪切板互换的情况.下面给出利用 API 解决的方法.这是原来从网上摘下来的,版权归原作者.基本处理的代码如下,你可以将其应用到你的代码中 ...

  4. VFP9利用_GdiPlus类处理图片分辨率及缩放

    VFP利用GDI来处理图片,已经不是一件太难的事了.GdiPlus类就是专门来干这事的,有关其属性等请参考其它资料.下面将处理图片缩放及分辨率的代码示例贴出来.这些代码都是很久以前的了,由于新冠宅家无 ...

  5. 3,HDFS原理

    1,HDFS体系结构 ··· HDFS是采用master/slaves即主从结构模型来管理数据的.这种模型主要由四部分组成,分别是Client.NameNode.DataNode.SecondaryN ...

  6. vscode自己常用的快捷键

    (1)快速复制一行 ctrl + alt +

  7. 避免XSS攻击

    遭遇XSS攻击怎么解决 XSS的攻击手段 利用JavaScript或DOM方式进行攻击,XSS(脚本注入)提交,然后进行页面展示,影响页面的正常结构,还可以做钓鱼网站,来盗取用户的信息. 比如在页面评 ...

  8. [20200129]子光标不共享BIND_EQUIV_FAILURE.txt

    [20200129]子光标不共享BIND_EQUIV_FAILURE.txt --//生产系统再次遇到大量BIND_EQUIV_FAILURE原因导致子光标的情况.我看了我以前测试遇到的情况.--// ...

  9. Windows一些技巧

    更改文件夹的显示名称 在要修改的文件夹下创建desktop.ini,在文件中输入: [.ShellClassInfo] LocalizedResourceName= [要显示的名字] 在CMD中输入命 ...

  10. MySQL安装图解及调试

    MySQL 5.7安装图解 注意:请确认系统是否已安装Microsoft Visual C++2013 Redistributable基本运行库,开始>控制面板>卸载程序中查看,如图所示: ...