STL的常見用法(1)

2021-08-30 17:41:27 字數 2686 閱讀 9550

1.vector 定義:vectorname;

typename 表示可以是任何基本型別,int, doubel, char, 結構體,也可以是stl標準容器,例如vector, set, queue 等。

例如:vector> name;相當於乙個二維陣列只不過這個是變長的。

2.vector 容器內元素的訪問;一般有兩種形式@1:下標訪問,@2:通過迭代器訪問。

迭代器(iterator)可以理解為一種類似指標的東西,定義:vector::iterator it;可以通過*it來訪問vector裡面的元素。

int main()

vector::iterator it = v.begin();

for(int i = 0; i < 5; i++)

printf("\n");

for(int i = 0; i < 5; i++)

printf("\n");

for(vector::iterator it = v.begin(); it != v.end(); it++)

return 0;

}

在常用stl容器中,只有在vector和string中,才允許使用v.begin() + 3這種迭代器加上整數的寫法。

int main()

v.insert(v.begin() + 2, -1); //用來向vector的任意迭代器it插入乙個元素x,時間複雜度o(n)

用來刪除vector尾元素。size()獲得vector中元素個數

//erase()有兩種用法,刪除單元格,刪除乙個區間[)的所有元素,時間複雜度為o(n)

+ 3);

//for(int i = 0;i < v.size(); i ++)

v.erase(v.begin()+1,v.begin()+2);

for(int i = 0;i < v.size(); i ++)

printf("\n");

清空vector中所有元素

//printf("%d\n",v.size());

return 0;

}

set的常見用法:

set的定義:setname;定義賀vector的一樣。大部分stl都是這樣定義的。

set元素的訪問;由於除開vector和string之外的stl容器都不支援*(it+i)的訪問形式。

int main()

printf("\n");

//find()函式返回set中對應為value的迭代器,時間複雜度為olog(n)

printf("%d\n",*(s.find(5)));

//erase()函式有兩種用法:刪除單個元素,刪除乙個區間內的所有元素;

//刪除單個元素有兩種方法刪除迭代器,或者直接刪除value.

//區間刪除[);

//size()返回set內元素的個數。時間複雜度o(1)

printf("%d\n",s.size());

s.erase(s.find(3),s.end());

for(set:: iterator it = s.begin(); it != s.end(); it++)

printf("\n");

//clear()清空set的所有元素時間複雜度o(n)

s.clear();

printf("%d\n",s.size());

return 0;

}

使用find函式要判斷元素是否存在只是要使用迭代器:

sets;

for(int i = 1; i <= 5; i++)s.insert(i);

set::iterator iter;

iter = s.find(5);

if(iter!=s.end())else

set中元素是唯一的,如果需要處理不唯一的情況,則可以使用multiset。另外還增加了unordered_set,以雜湊表代替set內部的紅黑數。可以用來處理只去重不排序的需求,速度比set快的多。

string的常見用法:

string的定義:string str;

int main()
在這裡主要說明find()函式和string::npos的使用;

int main()

//if(str.find(str2,7) != string::npos)

//replace()

//replace(pos,len,str2)把str從pos位置開始。長度為len的子串替換為str2.

//replace(it1,it2,str2)把str的迭代器[it1,it2)範圍的子串替換為str2;時間複雜度為o(str.length())

string str = "maybe you will turn around";

string str2= "will not";

string str3 = "surely";

cout << str.replace(10, 4, str2) << endl;

cout << str.replace(str.begin(),str.begin()+5,str3) << endl;

return 0;

}

STL常見用法整理 remove if

remove if 操作是把符合要求的放在容器的末尾,而不是直接刪除。說明 remove if 演算法從範圍移除所有元素 首先,最後乙個 導致謂詞以返回 true。它返回乙個迭代器等於最後乙個 n,其中 n 移除的元素數。該範圍的最後乙個的 n 個元素具有未定義值。容器的大小保持不變。主要是 rem...

STL中佇列queue的常見用法

一 queue 佇列 簡介 佇列也是一種邏輯資料結構,其具有先進先出的特性,只能在隊的前端進行刪除,在隊的後端進行插入。針對這種特性,可以實現一些較為複雜的邏輯。在實際應用中,部分程式也正需要這樣一種順序進出的資料處理方式。使用這樣的邏輯處理方式,使得我們可以將更多精力放在如何處理順序邏輯之外的事情...

STL之pair常見用法詳解

摘自胡凡的 演算法筆記 僅作記錄用!前言 一 pair的定義 pair有兩個引數,分別對應first和second的資料型別,它們可以是任意基本資料型別或容器,可以使用pairname 定義乙個pair型別。如果想要在 中令是構建乙個pair,有如下兩種方法 二 pair容器內元素的訪問 pair中...