首先感謝sls的講解,以下是聽完sls的講解後做的總結筆記,原本對stl一知半解,現在總算通了。
1.c++ stl(標準模板庫)是一套功能強大的 c++ 模板類,提供了通用的模板類和函式,這些模板類和函式可以實現多種流行和常用的演算法和資料結構,如向量、鍊錶、佇列、棧。
2.它的核心是容器,演算法,迭代器(平時用陣列時用for迴圈,但在迭代器中要用迭代器)。
----vector向量----
1.vecor和陣列
vecor其實就是陣列,但兩者不同之處是vector是不用提前定義長度。
比如有3 行的字母,每行字母數不同,如果每行字母數最大為10000,最小為1,用陣列去儲存,就得開個3*10000的空間,勢必得浪費很多,而用vectorvec[3], vec[i]的size都不一樣,會根據你放的元素數量變化,這樣節約了空間。由於這個優勢,vector在圖論中常用。
但在能確定元素數量的情況下,用陣列更好,速度快。
2.vector的賦值。
有3種賦值方法,為以下
a[0]=temp;
scanf("%d",&a[0]);
a.push_back(1)。
但是前2種相當於把vector變成了陣列,要提前說明它的大小,要vector a(10);
也就喪失了它不定長少記憶體的優勢,那還不如不用。
以下為報錯用法。
#include #include #includeusing namespace std;
int main()
改正後為
#include #include #includeusing namespace std;
int main(){
vectora(10);
int temp=1;
//a[0]=temp; //直接return 程式結束
//scanf("%d",&a[0]); //一直沒有反應
//反應正常
bool b;
b=a.empty();
printf("%d %d %d",b,a[1],a[2]);
return 0;
但同時注意這時候開了空間後,他就往裡面都填0,所以empty不會為1了。
----map對映----
1.賦值方法
a.map[s]=id;
b.map.insert(make_pair(s,id));
c.map.insert(pair(s,id));
2.特性
map的第乙個叫鍵,第二個叫值,分別相當於函式中的x和y,所以map中沒有重複的鍵,有重複的值。
3.map的應用
常用來計數,比如我們要記錄這個數字a出現過幾次,常寫為num[a]=k;但如果這個a>10e9,這個陣列無法建立。
而用map,節約空間。
4.map和pair
pair其實是定義好運算子的map,比較時會先比較first,而用map則在比較時要定義好cmp,是通過鍵還是值去比較。
pair寫法 paira;
----set集合----
1.特性
set中沒有重複元素,元素按定義規則排序。
2.賦值方法
se.insert(a);
3.set排序方法
setst;
setst;
STL容器入門
目錄 1.vector 向量 4.map 對映 5.棧6.佇列和優先佇列 c 清空佇列 queue 的幾種方法 方法一方法二 方法三7.deque雙端佇列容器 include include includeaccumulate的標頭檔案 include 向量 using namespace std ...
STL容器總結
一.種類 值得注意的是,陣列可以和 stl演算法配合,因為指標可以當作陣列的迭代器使用。二.刪除元素 如果想刪除東西,記住 remove 演算法後,要加上 erase 所謂刪除演算法,最終還是要呼叫成員函式去刪除某個元素,但是因為 remove 並不知道它現在作用於哪個容器,所以 remove 演算...
STL用法總結
在c std map上面用迭代器移除元素 序列性容器 vector erase 迭代器不僅使所有指向被刪元素的迭代器失效,而且使被 刪元素之後的所有迭代器失效,所以不能使用 erase iter 的方 式,但是 erase 的返回值為下乙個有效的迭代器,所以 正確方法為 for iter c.beg...