C++_STL筆記1
近期發覺一些設備商開發的UI應用
底層多數使用之程式語言
都是採用 C/C++
有很多這種符號 :: 或者 *
相信未來在一些需求上會很常碰到
再次來溫故暖身一下
===========================================================
STL 基本上 標準模板庫
是一種 容器之集合 , 組件之集合
更包括許多基本算法,我們許多聰明優秀開發的程式開發者
可以將一些算法進行容器之套用。
其主要組件有 「容器」、「迭代器」、「算法」、仿函数( functor ) 。
容器(Container): list , vector , set , map ..... 等等
主要用途:管理一些特定類(物件)之集合。
疊/迭代器(iterator):
主要用途:針對某特定物件群集之元素進行遍歷。
算法(Algorithms):
主要用途:用來處理群集中元素。
===========================================================
STL 結構示意
===========================================================
容器(Container)
常見的
vector<T> :一種向量
List<T> :一種雙向鏈表
Queue<T> :一種佇列容器 --->排隊 =>先進先出(FIFO)
Stack<T> :一種堆疊(棧)容器 --->疊盤子 =>後進先出(LIFO)
Deque<T> :一種雙端佇列容器
Set<T> :一種集合容器
Map<key,value>:一種關聯陣列容器
又可分為 兩大類
【1】序列式容器
vector、List、Queue、Stack、Deque
【2】關聯式容器
Set、Map
===========================================================
算法(Algorithm)
STL 提供眾多給程式設計師相關資料結構算法
定義於 <algorithm> 的 Header檔案之中
STL眾多算法 主要根據 模板 去實踐 --> 類型依賴於疊代器,不侷限於單一容器!!
不同STL算法需要不同類型疊代器去實踐相應功能,
因為不同類型之STL容器支持不同類型之疊代器。
因此不能對所有容器皆使用相同之算法。
===========================================================
疊/迭代器(iterator)
即 「指示器」
又可以視為 C++的指標
可以使我們針對 STL容器內容進行反覆訪問(遍歷)
一次可一至多個
此外 疊代器 還可以被修改、引用
主要定義了 四種類型
輸入疊代器:
給輸入資料(一般指容器、資料流)提供輸入接口介面,僅能從一個序列中讀取資料。
輸出疊代器:
主要用於輸出程式已獲得之資料結果(Ex:容器、資料流),僅能針對一個序列中寫入資料
雙向疊代器:
可同時進行前向、後向資料操作。
換言之就是可讀又可寫(同時)
PS:所有STL容器皆有提供此功能!!!
隨機接入疊代器(最具彈性、靈活):
可透過跳躍方式訪問任意資料元素,具備雙向疊代的所有功能
===========================================================
仿函數(functor)
可以視為函數的一般形式。
仿函數有幾種約束,於一般C++規範,函數調用多使用指標,
當需要調用函數時,只需要告訴函數之位址(地址)即可。
===========================================================
內存配置器(memory allocation)
包含底層之內存分配 以及 釋放
STL 中提供三種配置器
- Stack<Container>
- Queue<Container>
- Dequeue<Container>
一個簡單 Stack 使用示範
在接下來我們可以熟悉常用的 vector容器使用
Vector 示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | // vectorEx.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include<iostream> #include<vector> #include<string> using namespace std; const int NUM = 5; int _tmain(int argc, _TCHAR* argv[]) { vector<string> names(NUM); vector<int> sexs(NUM); cout << "Please Do Exactly As Told.Tou Will enter\n" << NUM << "Personal Name Their Sex.\n"; int i = 0; for (i = 0; i < NUM; i++) { cout << "Enter Name#" << i + 1 << ":"; getline(cin, names[i]); cout << "Enter sex(0/1)# ,0:male/1:female=>"; cin >> sexs[i]; cin.get(); } cout << "Thanks for entering following:\n" << "name/sex" << endl; for (i = 0; i < NUM; i++) { cout << names[i] << "\t" << sexs[i] << endl; } return 0; } |
即可獲得如下輸入後對應輸出結果
用法在起初使用上 非常像 Array
留言
張貼留言