萌新谈STL(上)vector,string,queue,priority_queue,stack
开始不懂,用栈和队列这些东西的时候都自己定义单链表,一段段写过去,后来才发现了C++的STL这么一个神器。
一,vector变长数组:
1)一维变长数组定义:vector<typename> name
2)二维变长数组定义:vector<vector<typename> > name //name前的两个>要以空格隔开
3)vector数组的定义:vector<typname> Arrayname[arraysize]
这样Arrayname[0]至Arrayname[arraysize-1]所存储的元素都是变长数组。
4)访问变长数组vector的指针:迭代器iterator:
定义:vector<typename>::iterator it
5)begin()函数是取首元素地址,end()是迭代器末尾的地址,是结束的标志,不存储任何元素。(vi[i]和*(vi.begin()+i))等价)
6)push_back()函数,在变长数组末尾加一个元素
7)pop_back()函数,去掉变长数组末尾的元素
8)size()用来获得变长数组总元素个数
9)clear()清空变长数组的所有元素
10)insert(it,x):it是迭代器iterator,x是待插入的元素
11)重载函数erase():
erase(it)删除it迭代器指向的一个元素
erase(first,last)删除first指向元素last指向的元素,即[first,end)区间删除
二,string字符串
1)length()/size():返回string长度
2)重载函数insert(pos,string):在pos位置插入string字符串
insert(it,it2,it3):[it2,it3)将被插入到it位置上
3)重载函数erase(first,last):同vector
erase(pos,length):pos为需要开始删除的起始位置,length为删除的字符个数
4)clear():同vector
5)substr(pos,len):从pos号位开始返回长为len的子串。、
6)重载函数str.find(str2):当str2是str的子串时,返回str中第一次出现的位置,若str2不是子串,返回string::npos
str.fing(str2,pos):只是改为从str的pos位开始查找而已。
string::npos有两个值-1和4294967295(int最大值)
7)重载函数replace():
str.replace(pos,len,str2)把从pos号位开始长为len的子串替换为str2
str.replace(it1,it2,str2)把str的迭代器[it1,it2)范围子串替换为str2。
三,队列queue
1)push()入队
2)pop()出队
3)front()取队首元素
4)back()取队尾元素
5)empty()判空
6)size()队列长度读取
四,优先队列(堆)priority_queue
1)定义:priority_queue<typename> name
2)push(),pop(),empty(),size()同上
3)top()取队首元素,取消了front()和back()
4)若想把最小的元素放队首,升序排列,如下定义:
priority_queue<int,vector<int>,greater<int> >q
自定义比较大小函数(优先级设置):以水果名称价格为例
重载<或>号
#include<iostream>
#include<string>
#include<queue>
using namespace std;
struct fruit
{
string name;
int price;
friend bool operator < (fruit f1, fruit f2)
{
return f1.price < f2.price;
//return f1.price > f2.price;
//转换优先级改变小于号即可
}
};
priority_queue<fruit> q;
或者重载括号:
#include<iostream>
#include<string>
#include<queue>
using namespace std;
struct fruit
{
string name;
int price;
};
struct cmp
{
bool operator () (fruit f1, fruit f2)
{
return f1.price < f2.price;
//return f1.price > f2.price;
//转换优先级改变小于号即可
}
};
priority_queue<fruit,vector<fruit>,cmp> q;
若程序过于庞大,建议多用引用&和const
五,栈stack
1)push(),pop(),top(),empty(),size()与队列类似。同上“队列queue”
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下