常用STL总结

vector


有迭代器 可随机访问
vector<int>  x;  int t;   
vector初始化:
  	vector<int>a(10);
	vector<int>a(10,1);
	vector<int>a(b);		//b为vector
	vector<int>a(b.begin(),b.begin+3);		//b为vector
	int b[7]={1,2,3,4,5,6,7};
	vector<int> a(b,b+7;
1. x.push_back(t);  //把t插入到x的尾部
2. x.pop();	// 删除x的最后一个元素
3. x,empty(); // x是否为空 是返回true 否返回flase
4. x.clear();  //清空x
5. x.size();  //x的长度(元素个数)
6. x.begin(); 	//返回第一个元素的迭代器
   x.end();  	//返回最后一个元素下一个位置的迭代器  
   即二者是一个前闭后开区间
7. x.front()		//返回x的第一个元素
   x.back()		//返回x的最后一个元素
8.	x.erase(x.begin(),x.begin()+3);		//删除区间[x.begin(),x.begin()+3)的元素
9.	a.swap(b);		//将a中的元素和b中的元素整体交换
10. reverse(s2.begin(),s2.end());//逆序字符串

string

有迭代器 可随机访问
string 	x ,y;  char c;
1.	x==y    	//	可直接进行比较操作 ( 等价于strcmp(x,y)==0  ?   )
2.	s+=c  	 //	可通过’+’ 连接两个串,或者给一个串加上一个字符
3.  x=y   	 //	复制y给x  类似strcpy
4.  x.find(y)   //	返回字符串y在x中的位置,如果没有找到,则返回-1
5.  x.length()		x.size()	 // 求该串的长度
6.	clear()   empty()    与vector类似
7.	insert( pos,char )		//在指定位置pos前插入字符char
8.	push_back( char )		//尾插一个字符
9.	erase( iterator p )		//删除p所指字符
10.	replace(size_t pos, size_t n, const char *s )		//将当前字符串从pos下标位置开始的n个字符替换成字符串s
11.	sort(s.begin(),s.end())		//排序


set & multiset

有迭代器 不可随机访问 自动按ASCII码排序
set --> 有序集合 不重复 //类比数学中集合的互斥性
multiset --> 多重有序集合 即可重复
set<int>  x ;  multiset<int>  y ;  int t;
1.	x.insert(t) 	//插入一个元素  二者用法相同
2.	x.find(t) 		//查询t是否存在 存在则返回指向该元素的迭代器 否则 返回x.end()
3.	x.count(t)   //返回元素t的个数 
4.	clear()   size()  empty()   x.begin()   x.end() 与vector类似
5.	max_size()
6.	rbegin()  rend()


例题:
安迪的第一个字典
输入一个文本,找出所有不同的单词(连续的字母序列),按字典序从小到大输出。单词不区分大小写。
样例输入:
Adventures in Disneyland

Two blondes were going to Disneyland when they came to a fork in theroad. The sign read: “Disneyland Left.”

So they went home.
样例输出:(部分)
A
Adventures
Blondes
Came
Disneyland
实现代码:

#include<bits/stdc++.h>
using namespace std;
set<string> dict;
int main(){
	string s,buf;
	while(cin>>s)
	{
		for(int i=0;i<s.length();i++)
			if(isalpha(s[i])) 
			   s[i]=tolower(s[i]); 
			else 
s[i]=' ';
		stringstream ss(s);
		while(ss>>buf) dict.insert(buf);
	}
	for(set<string>::iterator it=dict.begin();it!=dict.end();++it)
		cout<<*it<<"\n";
	return 0;
}

stack —> 先入后出

没有迭代器 不可随机访问
stack<int>  x ;		 int  t ;
1.	x.push(t) ;	//向栈顶插入t  注意: 尾部叫做栈顶
2.	x.pop(t) ;		//删除栈顶元素
3.	size()	empty()  与vector类似 但没有clear() 操作
4.	top()		//获得栈顶元素

queue —>先入先出 (循环队列)

没有迭代器 不可随机访问
queue<int> 	x ; 	int  t;
1.	x.front()		//返回队头元素
2.	x.pop()		//将队头弹出 即删除最先进入的元素
3.	x.push(t) 	//将t插入队尾
4.	x.back()		//返回队尾元素
5. 	size()	empty()  与vector类似 但没有clear() 操作
6.	full()		//判断队列是否满了

Map

有迭代器 可随机访问
map<string,int> 	x; 	string 	s;
1.	size()  /empty()  /clear()  /begin()  /end()均与set类似
2.	x.find(s)   //查询x中是否存在以s位键值的元组,没有则返回 x.end() 有则返回该元组的迭代器
3.	x.count(s)  //查询x中以s为键值的元组个数,实际只有1和0
5.	erase()	删除一个元素

迭代器可以类比数组指针理解  可用auto代替
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐雨风栉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值