“這裡要用char類型”; “這裡要用int類型”; “其實實現這個方法只需要把另一個方法的返回值的類型和傳入參數的類型改成float類型就實現了”; “其實這個演算法只需要把以前寫的那個稍微改動一下就行了”; ……………… 學過面向對象語言的都知道GP這個概念,就是泛型程式設計,說的再明白點就是編寫 ...
“這裡要用char類型”;
“這裡要用int類型”;
“其實實現這個方法只需要把另一個方法的返回值的類型和傳入參數的類型改成float類型就實現了”;
“其實這個演算法只需要把以前寫的那個稍微改動一下就行了”;
………………
學過面向對象語言的都知道GP這個概念,就是泛型程式設計,說的再明白點就是編寫不依賴於具體數據類型的程式,C++作為一門面向對象語言,當然也有泛型這個概念,這就不得不提STL(Standard Template Library,標準模板庫),是被融入C++標準程式庫裡面的一個高效的庫,對於更深入學習C++瞭解和學習STL是很必要的!
本人雖然有修C++的課程,但是學的...
接下來的時間我會把我的學習筆記和大家分享,不喜勿噴! (主要是為了加深理解和記憶)
個人覺得先從整體上瞭解一下是很有必要的:
STL主要包含容器、演算法、迭代器三大核心部分:
1. STL容器包含了絕大多數數據結構,如數組、鏈表、字元串、隊列、堆棧、樹等;
簡單的說就是一種存儲有限個某類型數據元素的集合,每種類型都是一個數據結構.
常用的容器和容器適配器對應的頭文件
容器類別 |
數據結構(容器類) |
實現頭文件 |
序列式容器 |
向量(vector) |
<vector> |
雙向隊列(deque) |
<deque> |
|
雙向鏈表(list) |
<list> |
|
關聯式容器 |
集合(set)、多重集合(multiset) |
<set> |
映射(map)、多重映射(multimap) |
<map> |
|
容器適配器 |
棧(stack) |
<stack> |
隊列(queue)、優先順序隊列(priority_queue) |
<queue> |
2.STL演算法包含了諸如增、刪、改、查、排序等系統(全局)函數模板。這些演算法都是泛型演算法,同一個演算法可以適用於任意類型的容器;
STL中的演算法分別被組織在頭文件<algorithm>,<numeric>和<functional>中,STL提供了大約70多個已經實現了的演算法的函數模板,懂得了後只需要簡單的調用演算法模板就可以實現某些演算法功能.
3.STL 迭代器類似指針一樣,通過它的有序移動,把容器中的元素與演算法關聯起來,它是實現所有STL功能的基礎所在。
“容器負責存儲數據元素,演算法負責加工處理數據元素,那麼是誰負責將數據元素從容器里提取出來交給演算法去處理呢?又是誰負責將演算法處理過的數據元素寫入容器呢?這項任務由迭代器負責完成。迭代器將容器與演算法耦合起來,通過迭代器可以對容器內任意位置上的元素進行定位和存取(access)。”
三者之間的關係:
容器負責存儲數據元素,演算法負責處理數據元素。而迭代器則負責從容器中存取一個個數據元素提交給演算法去進行處理,或者將演算法處理完的數據元素放入容器。因此,迭代器將演算法和容器連在一起.
先貼一個簡單的程式吧:
#include <iostream> #include <vector> //向量頭文件 #include <iterator> //迭代器頭文件 #include <algorithm> //演算法頭文件 #include <functional> //函數對象(仿函數)頭文件 using namespace std; //導入命名空間std void main()
{ const int N = 5; vector<int> s(N); //定義一個含有5個int類型數據元素的向量容器對象s vector<int>::iterator pos; //聲明一個向量迭代器pos,該向量元素為int型 for (int i = 0; i < N; ++i) cin >> s[i]; //從鍵盤依次輸入整數5、-3、1、0和8 //顯然,向量容器可以隨機訪問 cout<<"從鍵盤輸入的5個整數是:"<<endl; for (pos = s.begin(); pos != s.end(); pos++) cout << *pos <<", "; //通過迭代器pos訪問向量容器的元素 cout<<endl; cout<<"輸入的5個數的相反數是:"<<endl; transform(s.begin(), s.end(),ostream_iterator<int>(cout, ", "), negate<int>()); cout << endl; }