今天突然发现,各个容器之间使用同样函数时的方法还是有不小的差异,为了以后写代码更方便一些,来总结一下,方便以后复习和使用!
1. 先来说说vector容器吧。
1)find函数:
首先,find不属于vector的成员(圈好它,重点),而存在与算法中,所以应该加上头文件#include< algorithm >.
其次,因为不是其成员,所以格式为
find(v.begin(),v.end(),c);
这是在整个v中去查找c,如果没有找到,则返回的是v.end()。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int>v;
for(int i=0;i<5;i++)
v.push_back(i);
if(find(v.begin(),v.end(),2)!=v.end()) cout<<"YES!";
else cout<<"NO";
return 0;
}
2)sort函数:(包含在头文件#include < algorithm>)
sort函数都差不多
sort(v.begin(),v.end(),cmp);
可以自定义cmp函数,也可以不使用,默认升序。
3)insert函数:
(1)在指定的位置前头插入给定的元素,
v.insert(it,8);
该式子的返回值是指向这个容器的迭代器。即 *(v.insert(it+1,8)) 为第一个元素8。但是在执行这条语句时,会先执行
v.insert(it+1,8)
,再取值。
(2)在指定位置的前头插入n个给定的元素,
v.insert(it+3,2,9);
在下标3前插入2个9。
(3)在指定位置前插入一个区间[begin,end]的值。
int arr[3]={7,7,7}; v.insert(it+5,arr,arr+2);
这里特别注意!!
在给数组初始化的时候,我们都习惯int arr[5]={0},这个是把所有元素都初始化为0。
而int arr[5]={7}只是把第一个元素初始化为7,其余都补0。(刚才才发现。。。。)
这是为什么呢?
数组初始化列表中的元素个数小于指定的数组长度时,不足的元素补以默认值。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int>v;
for(int i=0;i<5;i++)
v.push_back(i);
auto it=v.begin();
v.insert(it,8)
cout<<*(v.insert(it+1,8));
v.insert(it+3,2,9);
int arr[3]={7,7,7};
v.insert(it+5,arr,arr+2);
for(auto it=v.begin();it!=v.end();it++){
cout<<*it<<" ";
}
return 0;
}
2. 来说说set容器吧
1)find函数:
首先set有find的成员函数,所以
s.find(2)!=s.end();
为在set容器中查找2这个元素,如果没找到返回s.end();
2)sort函数:
无法用STL里的sort算法对容器set作排序。set本身就是一种有序的容器(默认升序排列)。 set主要用于不常变动的数据,对其数据的变动,只能是删除旧的,然后再插入新的。s.erase(1);删除1这个元素。
3)insert函数:
因为set是有序的容器,所以直接插入就行,
s.insert(2);
。
(有没有感觉它和map差不多,map<string ,int>m(类型当然很随意啦) 自动将所有键值对按照键从小到大排列。sort也是默认升序哦!)
3.来说说
string类
吧
(string类的函数感觉超级多还都比较实用)
1)find函数:
首先find函数也是string类的一个成员函数哦
(1)s1.find(s2);在s1中找子串s2。
(2)s1.find(s2, 2) ; 从S1的第二个字符开始查找子串S2.
s1.find(‘G’)是在字符串s1中寻找字符‘G’,
如果找到了,则返回的是这个字符所在的下标,否则返回一个特殊值string::npos。
在写L1-023 输出GPLT时就用到了这一点。
if(s.find('G')!=string::npos) {cout<<"G"; s[s.find('G')]='0'; flag=0;}
2)insert函数
先说一个很实用的,
a.insert(0,4-a.length(),‘0’);
没错,这句话就是不足四位在前补0。
原型:
a.insert(int po,int n,char c); //在po位置插入n个字符
虽然string类的insert函数有许多,我常用的就这一个(应该是我道行尚浅),以后要是还有,继续补充。