1. 程式人生 > >總結vector,set,string的find,insert,sort函式的用法

總結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函式有許多,我常用的就這一個(應該是我道行尚淺),以後要是還有,繼續補充。