萌新谈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”

 

 

 

 

           

           

          

 

 

posted @   TIM3347_Tian  阅读(10)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示