5. 容器演算法迭代器初識
stl大體分為六大元件,分別為:容器,演算法,迭代器,仿函式,介面卡(配接器),空間配置器
容器:各種資料結構:如vector
,list
,deque
,set
,map
等,用來存放資料
演算法:各種常用的演算法:如sort
,copy
,for_each
等
迭代器:扮演了容器與演算法之間的膠合器
仿函式:行為類擬函式,可作為演算法的某種策略
介面卡:一種用來修飾容器或者仿函式或迭代器介面的東西
空間配置器:負責空間的配置與管理
容器:置物之所也
stl容器就是將運用最廣泛的一些資料結構實現出來
常用的資料結構:陣列,鍊錶,樹,棧,佇列,集合,對映表 等
這些容器分為序列式容器和關聯式容器兩種:
演算法:問題之解法也
有限得步驟,解決邏輯或教學上的問題,這一門學科叫做演算法(algorithms)
演算法分為:質變演算法和非質變演算法
迭代器: 容器和演算法之間粘合劑
提供一種方法,使之能狗依序尋訪某個容器所含的各個元素,而又無需暴露該容器的內部表示方式
每個容器都有自己的專屬迭代器
迭代器使用非常類似於指標,初學階段可以先理解迭代器為指標
迭代器種類:
種類功能
支援運算
輸入迭代器
堆資料的唯讀訪問
唯讀,支援++
,==
,!=
輸出迭代器
對資料的只寫訪問
只寫,支援++
前向迭代器
讀寫操作,並能向前推進迭代器
讀寫,支援++
,==
,!=
雙向迭代器
讀寫操作,並能向前和向後操作
讀寫,++
,--
隨機訪問迭代器
讀寫操作,可以以跳躍的方式訪問任何資料,功能最強的迭代器
讀寫,支援++
,--
,[n]
,-n
,<
,<=
,>
,>=
注:常用的容器中迭代器種類為雙向迭代器,和隨機訪問迭代器
了解stl中容器,演算法,迭代器概念後,我們利用**感受下stl的魅力
stl中最常用的容器為vector
,可以理解為陣列。
容器:vector
演算法:for_each
迭代器:vector::iterator
例:
#include
using
namespace std;
#include
#include
void
myprint
(int val)
void
test()
//第二種遍歷方式
cout <<
"第二種遍歷方式"
<< endl;
for(vector<
int>
::iterator it = v.
begin()
; it != v.
end(
); it++
)//第三種遍歷方式 ,使用stl提供的標準遍歷演算法(for_each) 標頭檔案
cout <<
"第三種遍歷方式"
<< endl;
for_each
(v.begin()
, v.
end(
), myprint);}
intmain()
例:
#include
using
namespace std;
#include
#include
class
person
string m_name;
int m_age;};
void
test()
}//存放自定義資料型別 指標
void
test01()
}int
main()
例:
#include
using
namespace std;
#include
#include
void
test()
//將小容器插入 大容器
v.push_back
(v1)
; v.
push_back
(v2)
; v.
push_back
(v3)
; v.
push_back
(v4)
;//通過大容器,把所有的資料遍歷一遍
for(vector< vector<
int>
>
::iterator it = v.
begin()
; it != v.
end(
); it++)
cout << endl;}}
intmain()
C STL簡單介紹
stl standard template library,標準模板庫 是c 對泛型程式設計思想的實現,最早是惠普實驗室開發的。在被引入c 之前該技術就已經存在了非常長的一段時間。後來stl成為ansi iso c 標準的一部分。各個 c 廠商也有各自對應的模板庫,這些庫效率可能非常高,但可移植性不...
C STL 的簡單介紹
本篇文章內容基本 於c語言中文網,根據其內容進行簡化 留作自我複習使用 c 的標準模板庫 standardtemplatelibrary 是泛型程式設計最成功應用的例項 stl是一些常用資料結構和演算法的模板的集合 順序容器關聯容器容器介面卡 也簡稱容器 舉例 棧stack 佇列queue 優先佇列...
C STL簡單應用
include include include 容器 陣列的增強版 include 去重,排序 include 自動建立key value對應 include 棧 先進後出 include 佇列 先進先出 using namespace std int main vector v a,a 3 不能直...