STL(string vector set map pair)常用操作

主要讲解具体几个常用内置函数的用法
string:

//string 动态字符串 
 string s;
 s="abc";//直接赋值 
 string st[100];
 cout<<s[0]<<endl;//string 支持下标索引
 s.length();s.size();//返回s的长度
 
 string s1,s2;
 s1="ak",s2="98";
 cout<<(s1+s2)<<endl;//支持"+"连接
 s1=s2;//将s2的值赋给s1 
 s1==s2;//类似有>= <= < > !=的关系运算符,按字典序从前往后比较
 
 s.empty() //空为true
 s.clear() //清空
 swap(s1,s2)//交换字符串
 s.push_back()//尾部添加字符(可以是字符串或单个字符) 
 s.pop_back()//尾部删除一个字符 
 
 s.insert();//插入函数 
 //s.insert(index,str) 
 string str1=s1.insert(1,s2);//在s1的index为1处插入s2 
 //str1="a98k";
 //s.insert(index,count,str)
 string str2=s1.insert(2,3,'7');//在s1的index为2处插入count为3的7
 //str2="ak777";
 
 s.begin();//返回s的起始地址
 s.end();//返回s的最后一个字符的后一位地址
 string::iterator iter;//迭代器(类似于指针),迭代器仅允许自加自减操作 
 //循环输出
 for(string::iterator iter=s.begin();iter!=s.end();iter++)
 	cout<<*inter;
 
 s.erase();//删除函数
 //s.erase(pos,n) 删除从pos开始的n个字符
 string str3="123456";
 str3.erase(3,2);//str3="1236"
 str3.erase(3); //str3="123“,默认pos及其以后全删除 
 //s.erase(iterator first,iterator second) 删除[first,second)的字符
 str3.erase(str3.begin()+3,str.begin()+5); //str3="1236"
 str3.erase(str3.begin()+3);//str3="12356" 删除单个字符
 
 //string中s.find()参考链接: https://www.cnblogs.com/wkfvawl/p/9429128.html
 s.find();//查找函数
 //s.find(str)返回查找子串(第一个)的第一个字符的地址,没有则返回npos 
 string str4="the is bk is the is";
 string::size_type pos;
 pos=str4.find("bk");//pos=7
 if(pos!=string::npos) cout<<pos;
 else cout<<"no find!"<<endl;
 //s.find_first_of(),s.find_last_of()返回子串在母串首次以及最后一次的位置
 pos1=str4.find_first_of("is");//pos1=4
 pos2=str4.find_last_of("is"); //pos2=18
 //s.find(str,pos) 查找pos后子串的位置(包括pos位置)
 pos3=str4.find("s",7);//pos3=11
 //查找所有字串在母串中出现的位置
 pos4=0;//从首地址开始 
 while((pos4=str4.find("s",pos4))!=string::npos){
 	cout<<pos4<<' ';
 	pos4++;
 }
 //s.rfind()反向查找子串在母串中的位置,用于判别字串是否唯一
 pos=str4.rfind("s"); 
 //上面链接有例题,建议看看

vector:

//vector 动态数组
 vector <string> a(10);//10个字符串型 
 vector <int> a(10,1);//10个整数型,值均为1
 vector <int> a(b);//将b的值赋给a
 vector <int> a;
 
 //string和vector的常用函数基本一致,以下重复不赘述 
 a.push_back();
 a.pop_back(); 
 a.begin();a.end(); 
 a.size();
 a.empty();
 a.clear();
 a.erase();
 a.insert();
 a.swap(b);//swap(a,b)均可 
 cout<<a[0]<<endl;//支持下标索引 
 vector<int>::iterator iter; 
 
 //以下不一样的函数
 a.back();//返回a的最后一个元素
 a.front();//返回a的第一个元素
 

set:

//set 其中元素唯一,有序
 set <int> s;
 s.insert(5);//向s中插入元素5
 
 //重复 
 s.empty();
 s.begin();s.end();
 s.clear();
 s.clear();
 s.size();
 set <int>::iterator iter;//不支持下标索引 
 
 //不一样的函数
 s.find(value);//若存在则返回value的迭代器的值,否则返回s.end()
 iter=s.find(1);
 if(s.find(1)!=s.end()) cout<<"存在";
 s.count(value);//统计value出现次数1或0,可以用来判断是否存在value
 s.erase(value);//删除value值

map+pair:

//pair将两个元素打包
 pair<int,string> s;
 s.first=1,s.second="ac";
 s=make_pair(1,"ac");//赋值
 
 //map参考链接: https://www.cnblogs.com/ZY-Dream/p/10037931.html
 //map是key(键),value(值)的形式,键唯一,值不唯一,自动排序
 map<int,string> m;
 m[key]=value;//数据的插入3种 
 m.insert(map<int,string>::value_type(1,"a"));
 m.insert(pair<int,string>(1,"a"));
 
 map<string,map<int,string> > a;//map的嵌套使用 
 for(map<string,map<int,string>::iterator iter=a.begin();iter!=a.end();iter++){
 	cout<<iter->first<<' ';
 	for(map<int,string>::iterator iter2=iter->seond.begin();iter2!=iter->second.end();iter2++)
 		cout<<iter2->first<<' '<<iter2->second;
 } 
 
 //map的常用函数,重复不说 
 m.count();//0或1 
 m.begin();m.end();
 //m.find(key);
 //m.erase(key);另外两种string中有 
 m.size();
 m.swap();
 m.clear();
 m.empty()

证明我今天干活了

你可能感兴趣的:(C/C++)