算法知识-18-STL

STL

STL 就是标准模板库

STL 提供了多种容器,比如

vector:动态数组

deque:双端队列

set:有序集合

map:有序映射,键值对集合,键唯一且自动排序

stack:栈

queue:队列

priority_queue:优先队列

我们本次主要使用栈(stack),队列(queue),动态数组(vector)

stack 栈

push(x):将元素x入栈。这是将元素添加到栈顶的操作。

pop():将栈顶元素出栈。这是移除并返回栈顶元素的操作。

top():获取栈顶元素。这个操作返回栈顶元素,但不会移除它。

size():获取栈中元素的数量。这可以用来检查栈的当前大小。

empty():判断栈是否为空。如果栈为空,返回true,否则返回false。
注意:pop()函数使用的过程中必须栈中有元素

queue 队列

q.push(x):将元素x插入到队列的尾部,即队尾插入元素。

q.pop():删除队列头部的元素,即队首删除元素。

q.front():获取队列头部的元素,但不删除它,即取队首元素。

q.back():获取队列尾部的元素,但不删除它,即取队尾元素。

q.size():返回队列中元素的数量,即队中元素数量。

q.empty():检查队列是否为空,如果队列为空则返回true,否则返回false,即判断队空。

vectot 动态数组

v.push_back(x):在动态数组v的尾部增加元素x。

v.pop_back():删除动态数组v的尾部元素。

v.begin():返回指向动态数组v首元素的迭代器(可以理解为首元素地址)。

v.end():返回指向动态数组v末尾元素下一个位置的迭代器(可以理解为末尾元素下一个地址)。

v.size():返回动态数组v中元素的数量。

v.empty():判断动态数组v是否为空,如果为空则返回true,否则返回false

** 排序也很重要 sort(v.begin(), v.end()); **

倒序这里我们可以使用 ** sort(v.ubegin(), v.uend());**

示例:

只出现一次的整数

题目描述

给定n个整数,这n个整数中只有某一个整数只出现一次,其余每个整数都出现多次。

请找到只出现一次的整数并输出。

注意:用vector存储这n个整数。

输入描述

两行,第一行表示数字个数n(2 < n ≤ 106)。

第二行,n个整数,每个整数之间空格分隔(0 ≤ x ≤ 10000)。

输出描述

一个只出现一次的整数。

样例输入 1

10

3 1 5 1 12 3 6 6 5 5

样例输出 1

12

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
vector<int> v;
int main(){
	int n;
	cin>>n;
	int num;
	for(int i=1;i<=n;i++){
		cin>>num;
		v.push_back(num);
	}
	//sort排序
	sort(v.begin() , v.end());
	int cnt=1; //计数
	for(int i=0;i<=v.size()-2;i++){
		if(v[i]==v[i+1]){ //当前元素等于下一个元素,计数+1
			cnt++;
		}else if(v[i]!=v[i+1] && cnt==1){ //当前元素不等于下一元素,且计数等于1
			cout<<v[i];
			return 0;
		}else{ //计数重置1
			cnt=1;
		}
	}
	cout<<v[v.size()-1]; //最大值只出现一次的情况
	return 0;
}

括弧匹配检验

假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如 () 或[([][])]等为正确的匹配,[(])或(或 (()))均为错误的匹配。

现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配?

输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出 "OK" ,不匹配就输出"Wrong"。输入一个字符串:[([][])],输出:OK。

输入描述

输入仅一行字符(字符个数小于255)。

输出描述

匹配就输出 "OK" ,不匹配就输出"Wrong"。

样例输入 1

(\]) 样例输出 1 Wrong ```cpp #include using namespace std; stack s; char a[257]; int main(){ cin>>a; int len = strlen(a); for(int i=0;i using namespace std; queue q; int n,t; int main(){ cin >> n; for(int i=1;i<=n;i++){ cin >> t; q.push(t); } int i=0; while(!q.empty()){ i++; if(i%2){ cout << q.front() << ' '; q.pop(); }else{ q.push(q.front()); q.pop(); } } return 0; } ```

相关推荐
??tobenewyorker11 分钟前
力扣打卡第二十一天 中后遍历+中前遍历 构造二叉树
数据结构·c++·算法·leetcode
贾全32 分钟前
第十章:HIL-SERL 真实机器人训练实战
人工智能·深度学习·算法·机器学习·机器人
rzl0238 分钟前
java web5(黑马)
java·开发语言·前端
GIS小天1 小时前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年7月4日第128弹
人工智能·算法·机器学习·彩票
jingling5551 小时前
面试版-前端开发核心知识
开发语言·前端·javascript·vue.js·面试·前端框架
oioihoii1 小时前
C++11 forward_list 从基础到精通:原理、实践与性能优化
c++·性能优化·list
满分观察网友z1 小时前
开发者的“右”眼:一个树问题如何拯救我的UI设计(199. 二叉树的右视图)
算法
m0_687399841 小时前
写一个Ununtu C++ 程序,调用ffmpeg API, 来判断一个数字电影的视频文件mxf 是不是Jpeg2000?
开发语言·c++·ffmpeg
爱上语文1 小时前
Redis基础(5):Redis的Java客户端
java·开发语言·数据库·redis·后端
A~taoker1 小时前
taoker的项目维护(ng服务器)
java·开发语言