總結vector,set,string的find,insert,sort函式的用法
今天突然發現,各個容器之間使用同樣函式時的方法還是有不小的差異,為了以後寫程式碼更方便一些,來總結一下,方便以後複習和使用!
- 先來說說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);
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;
}
- 來說說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函式有許多,我常用的就這一個(應該是我道行尚淺),以後要是還有,繼續補充。