总结vector,set,string的find,insert,sort函数的用法

今天突然发现,各个容器之间使用同样函数时的方法还是有不小的差异,为了以后写代码更方便一些,来总结一下,方便以后复习和使用!

  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;
}

  1. 来说说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函数有许多,我常用的就这一个(应该是我道行尚浅),以后要是还有,继续补充。

猜你喜欢

转载自blog.csdn.net/sun9979/article/details/84372336