当前位置: 首页 > news >正文

寒假集训一期(4)——STL容器整理合集(上)

这几天学了STL,写篇blog总结一下,以便后续作参考

文章目录

  • 一、 vector 动态数组
    • 常见操作
    • 如何定义二维vector
    • 结构体二维vector
  • 二、栈
    • 基本操作
  • 三、队列
    • 基本操作
    • 双端队列
    • 优先队列


一、 vector 动态数组

简单来说,vector是一个没有长度限制的数组,也叫不定长数组。

常见操作

函数功能
c.clear()移除容器中所有数据
c.empty()判断容器是否为空
c.erase(pos)删除pos位置的数据
c.erase(begin,end)删除[begin,end]区间的数据
c.front()传回第一个数据
c.insert(pos,elem)在pos位置插入一个elem拷贝
c.pop_back()删除最后一个数据
c.push_back(elem)在尾部加入一个数据
c.resize(num)重新设置该容器的大小
c.size()返回容器中实际数据的个数
c.begin()返回指向容器第一个元素的迭代器
c.end()返回指向容器最后一个元素的迭代器

如何定义二维vector

有两种方法:
法一:

int n = 5, m = 6;
vector<vector<int>> obj(n);//定义类型为vector的vector
for(int i = 0; i < obj.size(); i++){
	obj[i].resize(m);//实现二维
}

法二:

int n = 5, m = 6;
vector<vector<int>> obj(n, vector<int>(m));//直接定义二维

结构体二维vector

定义一个类型为结构体名字的vector即可

struct node{
	int x, y, z;
}tmp;
vector<node>a;//这里的node就是结构体上的node

二、栈

栈是一种先进后出的数据结构,先进去的元素会被压到栈底,从而实现先进后出,就像乒乓球盒一样。

基本操作

操作代码解释
入栈s.push(x)将x元素入栈
出栈s.pop()弹出栈的第一个元素
栈顶元素s.top()获取栈的第一个元素
元素个数s.size()获取栈中元素个数, 返回值为int
判空s.empty()bool类型,为空返回1,否则返回0

三、队列

队列是一种先进先出的数据结构

基本操作

操作代码解释
入队s.push(x)将x元素入队列
出队s.pop()弹出队列的第一个元素
队首元素s.front()获取队列的第一个元素
队尾元素s.back()获取队列的最后一个元素
元素个数s.size()获取队列中元素个数, 返回值为int
判空s.empty()bool类型,为空返回1,否则返回0

双端队列

顾名思义,可以从两边进,两边出

操作解释
push_back()在队尾压入元素
push_front():在队头压入元素
pop_back():删除最后一个元素
pop_front():删除第一个元素
front():返回第一个元素的引用
back():返回最后一个元素的引用

优先队列

优先队列是队列的一种,他是自动帮我们排序的,内部结构是大根堆,常见操作与一般的队列一样,但是定义方式有所不同
如:prioriyt_queue<int> q;
此外,我们经常为了适应题目背景,重载优先队列的排序顺序,一般是在结构体内实现的,大致如下

struct cmp{
	bool operator ()(int a, int b){
		return (a % 100) > (b % 100);
	}
};
void main(){
	priority_queue<int , vector<int>, cmp >q;
}

如果想要把结构体与优先队列结合起来,那么就需要重载小于符号,具体思想和上面差不多,格式如下:

struct node{
	int x, y;
	bool operator < (const node &a) const{
		//这里的node和结构体名字一样
		return x < a.x;
	}
}; 

除了定义在结构体以内,也可以定义一个专门用来做比较的结构体,只需要把刚刚重载运算符的部分提到cmp函数内,然后在定义有限队列是加上cmp即可,如下:

struct node{
	int to, cost;
};
struct cmp{
	bool operator ()(node a, node b){
		return a.cost > b.cost;
	}
};
priority_queue<node, vector<node>, cmp> priq;

相关文章:

  • 3d在线设计网站/淘大象排名查询
  • 美工做网站是怎么做/搜索引擎优化与关键词的关系
  • 网站制作工作室专业公司/百度一下你就知道官方网站
  • 北戴河区建设局网站/seo怎么去优化
  • blog.wordpress/国内最新新闻热点事件
  • 郑州网站建设推广/资源平台
  • 2023年1月Free Excel 打卡
  • 16、ThingsBoard-配置OAuth2
  • 商业模式-1
  • OpenCV实战——基于GrabCut算法的图像分割
  • React Native 初次安裝踩坑
  • ADI demo PL工程的编译-以adrv9371x_zc706为例子之使用Cygwin
  • 【Go基础】结构体
  • 2022年个人年终总结(一)
  • 如何使用OpenDRIVE
  • 邂逅Vue.js开发
  • linux基本功系列之pwd命令实战
  • 注意力机制