STL有关操作

@STL常用内容总结

vector(动态数组)

有关vector的相关操作:
1.头文件:#include
2.初始化:
vector<容器类型>v; 如:vector;
指定范围:vectorv(n) 相当于定义一个储存n个(int类型)元素的数组;
vectorv(n,1) 相当于定义一个储存了n个“元素1”的数组;
直接赋值: vectorv{0,1,2,3,4};
有关vector的详细操作参考有关vector代码仓库地址

queue(队列)

特点:先进先出
queue<类型>q;

q.push(N); 在队尾插入元素N;
q.pop(); 删除队列第一个元素;
q.front(); 返回队列第一个元素
q,back(); 返回队列最后一个元素;
q.size(); 返回队列元素个数;
q.empty(); 判断队列是否为空;

大顶堆:(又称优先队列)
priority_queue a; //默认大顶堆,内部从大到小排序
小顶堆:
priority_queue<int,vector,greater > c; //小顶堆,从小到大
(与优先队列操作与queue相同,但没有clear())

deque(双端队列)

特点首位都可以插入删除
deque<类型>de;

push_back(x)/push_front(x)把x插入队尾后 / 队首
back()/front()返回队尾 / 队首元素
pop_back() / pop_front()删除队尾 / 队首元素
erase(iterator it)删除双端队列中的某一个元素
erase(iterator first,iterator last)删除双端队列中[first,last)中的元素
empty()判断deque是否空
size()返回deque的元素数量
clear()清空deque

deque容器可以排序
sort(q.begin(), q.end())//从小到大

//deque里面的类型需要是int型
sort(q.begin(), q.end(), greater());//从大到小排序

sort(q.begin(), q.end(), greater());//从大到小(高版本C++适用)

stack(栈)

特点:后进先出
stack<类型>s;

s.push(n)n从栈顶入栈
s.pop()移除栈顶元素
s.top()返回栈顶元素
s.empty()判断栈是否为空
s.size()返回栈元素个数

注意:栈中元素不能直接遍历
遍历必须逐个取出栈内元素

map()

特点:两个参数为映射关系,即每一个键对应一个键值

根据键值大小,从小到大排列(所以键值类型必须可以比较大小且map不允许两个元素有相同的键值)
元素为pair ,pair的第一个元素为map的键,第二个元素为map的键值。
pair<int,int>P;
P.first为键,P.second为键值
有关map的相关函数
map<键类型,键值类型>m;
初始化:map<int,int> mp;
map[1]=12;
map[2]=14;
map[3]=18;
map[8]=6;
遍历
auto it = mp.begin();//正向遍历。
//auto it=mp.rbegin();//反向遍历
//while(it!=mp.rend())
while(it != mp.end()) {
cout << it->first << " " << it->second << “\n”;
it ++;
}
map<int,pair<int,int>>m;

遍历
for(auto it:m)
{
cout<<it.sr.fr<<" "<<it.sr.sr<<endl;
}

set

set容器中的元素不会重复,当插入集合中已有的元素时,并不会插入进去,而且set容器里的元素自动从小到大排序。

set<int, greater > s2; // 从大到小排序

set<类型>s;
在这里插入图片描述
初始化
for(int i = 1; i <= 10; i++)
s.insert(i);
遍历
for(auto i : s)
cout << i << " ";
对结构体排序

struct as{
	int x, y;
	bool operator < (const as &p) const {
		// 按照点的横坐标从小到大排序,如果横坐标相同,纵坐标从小到大
		if(x == p.x)
			return y < p.y;
		return x < p.x;
	}
};

set<as> s;
for(int i = 1; i <= 5; i++) {
    int x, y;
    cin >> x >> y;
    s.insert({x, y});
}	

/* 输入
5 4
5 2
3 7
3 5
4 8
*/

for(auto i : s)
    cout << i.x << " " << i.y << "\n";

/* 输出
3 5
3 7
4 8
5 2
5 4
*/

string

字符串类型
string s;
cin>>s;(与空格和回车读入结束)
getline(cin,s)//可读入空格,遇回车停止读入。
getline(字符串,个数,终止条件)

基本操作
输入
string s1,s2,s3;
cin>>s1;
s2=s1;//直接拷贝;
s3=“qas”;
s2=“qwq”
string s=s3+s2;
cout<<s;
输出结果:qasqwq
s.size() s.length() //返回字符个数
截取字符串
s1=“012345678”;
string s2 = s1.substr(2,3);
cout<<s2;
输出结果:234(从下标2开始截取3个字符)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值