【c++】find,insert,sort函数的用法(vector,string,set)

  • Post author:
  • Post category:其他


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


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



版权声明:本文为sun9979原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。