STL(standard Template Library 标准模板库)

STL(standard Template Library 标准模板库)

1.vector(长度可变数组)

  1. vector 的定义
vector<typename>name;

ps: 如果 typename 是一个STL容器时定义时要在>>符号之间加上空格 -->vector<vector<int> >name;
  1. vector容器元素的访问
* vector<typename>vi;
* 通过下标访问
	vi[index];
* 通过迭代器访问·
	vector<typename>::iterator it;
例如:
#include<algorithm>
#include<stdio.h>
#include<vector>
using namespace std;
int main(){
	vector<int>vi;
	for(int i=1;i<=5;i++)
	vi.push_back(i);
	vector<int>::iterator it=vi.begin();
	//vi.begin()取vi的首地址
	//vi.end()取尾元素的下一个地址,作为迭代器末尾的标志,不储存任何元素
	/*for(int i=0;i<5;i++)
		printf("%d ",*(it+i));
		return 0;*/
	for(vector<int>::iterator it=vi.begin();it!=vi.end();it++){
		printf("%d ",*it);
		//TODO
	}	
}
	
  1. vector常用函数
1.push_back()在vector末尾添加一个元素
2.pop_back()在vector末尾删除一个元素
3.size()返回vector中储存的元素个数
4.clear()清除所有元素
5.insert(it,i)用来向任意迭代器it处插入一个元素i
6.erase():
	用法1:
	删除单个元素
       erase(it)
	用法2:
	删除一个区间的所有元素
	erase(first,last)即删除[first,last)间的元素
例如:
#include<algorithm>
#include<stdio.h>
#include<vector>
using namespace std;
int main(){
	vector<int>vi;
	for(int i=1;i<=5;i++)
	vi.push_back(i);
	vector<int>::iterator it=vi.begin();
	//vi.begin()取vi的首地址
	//vi.end()取尾元素的下一个地址,作为迭代器末尾的标志,不储存任何元素
	printf("函数操作前\n");
	for(int i=0;i<5;i++)
		printf("%d ",*(it+i));
		//vi.insert(vi.begin(),10);//vector第一个地方插入一个元素
		printf("\n");
//	vi.erase(vi.begin()+3);//删除第4个元素
//vi.erase(vi.begin(),vi.begin()+3);//删除vi[0],vi[1],vi[2]
	printf("函数操作后\n");
	for(vector<int>::iterator it=vi.begin();it!=vi.end();it++){
		printf("%d ",*it);
		//TODO
	}	
}
  1. vector的初始化

下列一段非良构代码

vector<int>data;//未指定容器初始大小
for(int i=0;i<m;i++)
{
cin>>data[i];//会造成程序错误
}

为避免这种情况需RAII(资源获取即初始化)
关于vector的初始化

二维数组数据为0: vector<vector<int>>data(m,vector<int>(n,0));

2.set(set内元素自动排序,且去除重复元素)

  1. set数组定义

使用头文件#include <set>

set<int>a[100];

set<int>st;

  1. set数组的访问

只能通过迭代器访问

set::iterator it;

  1. set的常用函数
1.insert()
2.find(value)返回set中对应值为value的迭代器
3.erase()的用法:
	* erase(it) it为所需要的删除元素的迭代器
	* erase(value) value为所需删除的元素
	* erase(first,last)删除一个区间内所有的元素
4.size()
5.clear()
例子:
#include<set>
#include<stdio.h>
using namespace std;
int main(){
	set<int>st;
	st.insert(100);
	st.insert(3);
	st.insert(5);
	st.insert(22);
	set<int>::iterator it=st.find(5);
	printf("%d\n",*it);
}

3. string

  1. string的定义

头文件#include<string>

  1. string中的内容访问

    • 通过下标
    • 通过迭代器
    #include<string>
    #include<stdio.h>
    using namespace std;
    int main(){
    	string str="abcd";
    	for(string::iterator it=str.begin();it!=str.end();it++){
    		printf("%c",*it);
    		//TODO
    	}
    }
    
  2. string常用函数

1.operator+=
2.campare operator 
3.length()/size()
4.insert()用法
	insert(pos,str)在pos号位置后插入元素
	insert(it,it2,it3)it为原字符串的与插入位置,it2和it3为待插字符串的首尾迭代器
#include<string>
#include<stdio.h>
#include<iostream>
using namespace std;
int main(){
	string str="abcd";
	for(string::iterator it=str.begin();it!=str.end();it++){
		printf("%c",*it);
		//TODO
	}
	printf("\n");
	string str2="易助平";
	//str.insert(2,str2);//在第二个元素之后插入字符串
	str.insert(str.begin()+1,str2.begin(),str2.end());
	
	cout<<str;
}
5. erase()函数
    str.erase(first,last)
    str.erase(pos,length)删除pos号后的length个字符
6.clear()
7.substr(pos,len)返回pos位置后的len个字符
    cout<<str.substr(1,4)<<endl;//中文占两个英文位置
8.string::npos被作为find函数返回失败时的返回值,等于-1或者4294967295
9.find()
    str.find(str2)如果str2是str的子串,返回其在str中的第一次出现的位置,不是则返回string::npos
    str.find(str2,pos)从pos位置后开始匹配
    实例:
#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
int main(){
	string str="Thank you for your smile";
	string str2="you";
	string str3="me";
	if(str.find(str2)!=string::npos){
		cout<<str.find(str2)<<endl;
		//TODO
	}
	if(str.find(str2,7)!=string::npos){
		cout<<str.find(str2,7)<<endl;
		//TODO
	}
	if(str.find(str3)!=string::npos){
		cout<<str.find(str3)<<endl;
		//TODO
	}
	else{
		cout<<"i knew there is no position for me"<<endl;
	}
}
10.replace()
    str.replace(pos,len,str2)把str从pos号后开始长度为len的子串替换为str2
    str.replace(it1,it2,str2)把str的迭代器[it1,it2)的范围内的子串替换为str2
实例:                                      
#include<iostream>
#include<string>
using namespace std;
int main(){
	string str="Maybe you will turn around.";
	string str2="will not";
	string str3="surely";
	cout<<str.replace(str.find("will"),4,str2)<<endl;
	cout<<str.replace(str.begin(),str.begin()+5,str3)<<endl;
	return 0;
	
}
    
    

4.map(可以将任何基本类型映射到任何基本类型)

  1. map的定义

map<typename1,typename2>mp;

typename1为映射前数据类型,typename2为映射后数据类型

  1. map容器内元素的访问
1.通过下标
2.通过迭代
    输出按键的从小到大的顺序排列
#include<map>
#include<stdio.h>
using namespace std;
int main(){
	map<char,int>mp;
	mp['c']=20;
	mp['c']=30;//mp['20']被覆盖
	mp['r']=80;
	mp['m']=100;
	mp['j']=200;
	printf("%d\n",mp['c']);
	for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++){
		printf("%c %d\n",it->first,it->second);
		//TODO
	}
}
  1. map常用函数解析·
1.find()
2.erase
3.size()
4.clear()

5.queue

  1. 定义
  2. 访问
1.通过front()访问首元素,back()访问尾元素
  1. 函数
1.push()
2.front()和back()
3.empty()
4.pop()
5.size()

6. stack

1.top()
2.empty()
3.push()
4.pop()
5.size()

7. priority_queue

8.pair

记住一句话:Map由一个个pair组成

1.pair<T1,T2> p;(定义)
2.pair<T1,T2> p(v1,v2);//返回一个pair
3.pair<T1,T2> p={v1,v2};
4. make_pair(v1,v2);//返回一个用v1,v2初始化的pair
5.p.first,p.second;//读取数据

9. algorithm下的常用函数

1. max(),min(),abs()
2.swap(x,y)交换x与y的值
3.reverse(it,it2)可以将数组指针在[it,it2)之间的元素或容器的迭代器在[it,it2)范围内的元素进行反转
#include<algorithm>
#include<stdio.h>
#include<iostream>
using namespace std;
int main(){
	int a[10]={10,11,12,13,14,15};
	reverse(a,a+4);
	for(int i=0;i<6;i++){
		//TODO
		printf("%d ",a[i]);
		
	}
	string str="abcdefg";
	reverse(str.begin()+1,str.begin()+6);//将str[1]~str[6]反转
	cout<<str;
}
4.next_permutation()
#include<algorithm>
#include<stdio.h>
using namespace std;
int main(){
	int a[10]={1,2,3};
	do{
		printf("%d%d%d\n",a[0],a[1],a[2]);
		
	}while(next_permutation(a,a+3));
}
5.fill()
可以将数组或容器中的某一段区间赋为某个相同的值
6.sort()
sort(首地址,尾地址的下一个地址,比较函数)
Ps:前两个参数必填,比较函数不写,默认对前面的区间进行递增排序
#include<algorithm>
#include<stdio.h>
using namespace std;
int main(){
	int a[10]={10,-1,2,34,21,12};
	sort(a,a+6);//将a[0]~a[5]从小到大排序
	for(int i=0;i<6;i++){
		printf("%d ",a[i]);
	}
	return 0;
	}#include<algorithm>
#include<stdio.h>
using namespace std;
bool cmp(int a,int b){
	return a>b;
}//cmp
bool cmp(char a,char b){
	return a>b;
}
int main(){
	int a[10]={10,-1,2,34,21,12};
	sort(a,a+6,cmp);//将a[0]~a[5]从小到大排序
	for(int i=0;i<6;i++){
		printf("%d ",a[i]);
	}
	printf("\n");
	char c[]={'T','W','A','K'};
	sort(c,c+4);//按字典序从小到大排序
	for(int i=0;i<4;i++){
		//TODO
		printf("%c ",c[i]);
	}
	return 0;
	}                                               
7.lower_bound()和 upper_bound()
lower_bound(first,last,val)返回第一个大于等于val的位置,数组返回指针,容器返回迭代器
upper_bound(first,last,val)返回第一个小于等于val的位置
                                               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值