10_泛型程式設計與STL
阿新 • • 發佈:2020-07-22
泛型程式和STL
STL元件
-
容器:儲存元素的物件
-
迭代器:泛化後的指標
-
介面卡:stack, queue,
-
函式物件:泛化的函式
-
演算法:函式物件作為演算法的引數
迭代器
演算法和容器的橋樑,使得演算法和容器獨立
- istream_iterator 輸入流迭代器
- ostream_iterator 輸出流迭代器
- 前向迭代器
- 雙向迭代器
- 隨機訪問迭代器
迭代器的區間
- [p1, p2) 左閉右開;一般以迭代器的區間作為演算法的輸入
- advance(p, n) n次遞增
- distance(first, last) 兩個迭代器距離
#include <iostream> #include <vector> #include <algorithm> #include <iterator> using namespace std; template <class T, class InputIterator, class OutputIterator> void mySort(InputIterator first, InputIterator last, OutputIterator result) { vector<int> s; for (;first!=last;first++) { s.push_back(*first); } sort(s.begin(), s.end()); //隨機訪問迭代器 copy(s.begin(), s.end(), result); } int main() { //將s陣列的內容排序後輸出 double a[5] = { 1.2, 2.4, 0.8, 3.3, 3.2 }; mySort<double>(a, a + 5, ostream_iterator<double>(cout, " ")); cout << endl; //從標準輸入讀入若干個整數,將排序後的結果輸出 mySort<int>(istream_iterator<int>(cin), istream_iterator<int>(), ostream_iterator<int>(cout, " ")); cout << endl; return 0; }
容器
-
容器的通用功能
-
- 用預設建構函式構造空容器
- 支援關係運算符:==、!=、<、<=、>、>=
- begin()、end():獲得容器首、尾迭代器;end()指向最後一個元素的下一個位置
- clear():將容器清空
- empty():判斷容器是否為空
- size():得到容器元素個數
- s1.swap(s2):將s1和s2兩容器內容交換
-
相關資料型別(S表示容器型別)
-
- S::iterator:指向容器元素的迭代器型別
- S::const_iterator:常迭代器型別
-
STL為每個可逆容器都提供了逆向迭代器,逆向迭代器可以通過下面的成員函式得到:
-
- rbegin() :指向容器尾的逆向迭代器
- rend():指向容器首的逆向迭代器
-
隨機訪問容器支援對容器的元素進行隨機訪問
-
- s[n]:獲得容器s的第n個元素
順序容器
包括vector、雙端佇列