STL与基本数据结构
这是我第一次用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与基本数据结构的更多相关文章
- STL容器底层数据结构的实现
C++ STL 的实现: 1.vector 底层数据结构为数组 ,支持快速随机访问 2.list 底层数据结构为双向链表,支持快速增删 3.deque ...
- C++ STL 的底层数据结构实现
C++ STL 的实现: 1.vector 底层数据结构为数组 ,支持快速随机访问 2.list 底层数据结构为双向链表,支持快速增删 3.deque ...
- (使用STL中的数据结构进行编程7.3.15)UVA 630 Anagrams (II)(求一个单词在字典中出现的次数)
/* * UVA_630.cpp * * Created on: 2013年11月4日 * Author: Administrator */ #include <iostream> #in ...
- 第一周训练 | STL和基本数据结构
A - 圆桌问题: HDU - 4841 #include<iostream> #include<vector> #include<stdio.h> #includ ...
- 数据结构(DataStructure)与算法(Algorithm)、STL应用
catalogue . 引论 . 数据结构的概念 . 逻辑结构实例 2.1 堆栈 2.2 队列 2.3 树形结构 二叉树 . 物理结构实例 3.1 链表 单向线性链表 单向循环链表 双向线性链表 双向 ...
- 详细解说 STL 排序(Sort)
0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...
- stl 迭代器(了解)
STL 主要是由 containers(容器),iterators(迭代器)和 algorithms(算法)的 templates(模板)构成的. 对应于它们所支持的操作,共有五种 iterators ...
- STL之vetor 排序
1 STL提供的Sort 算法 C++之所以得到这么多人的喜欢,是因为它既具有面向对象的概念,又保持了C语言高效的特点.STL 排序算法同样需要保持高效.因此,对于不同的需求,STL提供的不同的函数, ...
- 对vector等STL标准容器的排序操作
[+] STL提供的Sort 算法 所有sort算法介绍 sort 中的比较函数 sort 的稳定性 全排序 局部排序 nth_element 指定元素排序 partition 和stable_par ...
随机推荐
- OsgEearh 中的 FeatureEditor的实现原理
先来看看FeatureEditor的用法: const osgEarth::SpatialReference* mapSRS = mapNode->getMapSRS(); osgEarth:: ...
- PYTHON 学习笔记1 PYTHON 入门 搭建环境与基本类型
简介 Python,当然大家听到这个名词不再是有关于像JAVA 一样的关于后台,我们学习Python 的目的在于对于以后数据分析和机器学习AI 奠定基础,Python 在数据分析这一块,可谓是有较好的 ...
- ELF文件之一——
ELF文件整体布局 下图是后来例子中main.o和main.elf的布局. 其中,只有elf header的位置是固定的,固定在文件开始,其它部分的位置都不确定. 比如下面的main.o布局中,.te ...
- JDBC 及 sql注入问题
一.相关概念 1.什么是JDBC JDBC(Java Database Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由 ...
- ASP.NET Core MVC 网站学习笔记
ASP.NET Core MVC 网站学习笔记 魏刘宏 2020 年 2 月 17 日 最近因为” 新冠” 疫情在家办公,学习了 ASP.NET Core MVC 网站的一些知识,记录如下. 一.新建 ...
- [javascript] 利用chrome的overrides实时调试线上js
chrome的开发者工具,在source选项卡下,可以看到js的源代码,有一个断点调试功能,就是在js的源代码行号那里点击一下,出现一个箭头,当再次刷新页面并且进行了相应操作时,就会停在断点的地方.我 ...
- SAP 序列号与库存关联起来?
SAP 序列号与库存关联起来? SAP系统标准功能可以实现序列号管理.其系统配置也不复杂,但是不少企业却使用不起来.笔者参与的诸多项目里,只有现在所在的项目里有启用序列号管理.基于项目客户所在行业,以 ...
- 百度架构师带你进阶高级JAVA架构,让你快速从代码开发者成长为系统架构者
百度架构师带你进阶高级JAVA架构,让你快速从代码开发者成长为系统架构者 1.
- .net core 3.1 webapi后端接收钉钉小程序post的文件/图片
世上本没路:走的人多了,便成了路. dd.uploadFile({ url: '请使用自己服务器地址', fileType: 'image', fileName: 'file', filePath: ...
- 3.Python运算符详解
1.算数运算符 符号:+ - * / %(取余.取模) //(取整) **(开方) 2.比较运算符 符号:> >= < <= ==(全等 ...