1了解標準模板庫stl
stl: 標準模板庫
stl, standard template library
標準模板庫,一般支援c++的編譯器都帶了stl的支援。裡面 提供了大量的函式模板(通用演算法)和類模板。
為什麼我們一般不需要自己寫模板?因為stl裡已經為我們 寫好了。
我們的任務是:學會使用它們。
stl: 標準模板庫
stl裡的模板太多,這一章介紹裡面最常用的幾個:
vector, list, map, string
一般用法:
(1)標頭檔案
stl的標頭檔案都是不帶.h字尾的,例如,要用vector的話則 #include // 不是vector.h
(2) 名字空間
stl使用名字空間std,因此可能需要使用
using namespace std;
或using std::vector;
stl: 標準模板庫
演示:例如,vector向量,用於封裝乙個類似陣列的功能。
vector arr;
arr.push_back(12);
arr.push_back(13);
printf("%d, %d \n", arr[0], arr[1]);
2標準模板庫stl之vector
stl: vector
要點:要明白vector內部的實現機制(參考第29章中的例子)
buffer: 緩衝區
capacity: 緩衝區的大小
size: 元素的個數
3標準模板庫stl之list
stl: list
list: 封裝鍊錶相關的功能
stl: list函式列表
函式名稱 功能
push_back 在尾部新增乙個元素
pop_back 的尾部刪除乙個元素
push_front 在尾部新增乙個元素
pop_front 的尾部刪除乙個元素
clear 清空所有元素
size 返回元素的個數
front 返回頭元素
back 返回尾元素
insert 在中間插入元素
erase 刪除中間的元素
遍歷鍊錶不能隨機訪問,只能按順序鏈式訪問,所以,只能使用 迭代器iterator
list::iterator, list內的迭代器
插入/刪除
list比vector用適合插入刪除操作
list鍊錶中插入/刪除乙個節點
(1)遍歷list,找到目標位置
(2)呼叫insert/erase,插入/刪除乙個節點
重要性vector可有可無,但list不可或缺
vector不常用到,使用普通的陣列完全沒有問題。
list經常用到,如果沒有list,那麼每個鍊錶都需要從頭寫 起,非常麻煩。
理解list的實現
template
class list
node m_head; // 頭節點 };
注意list內部維持了一串物件
object a;
a.id = 123;
strcpy(a.name, 「shaofa」);
list objs;
objs.push_back(a);
則鍊錶objs內部是建立了乙個物件,拷貝了a的內容
4標準模板庫stl之string
stl: string
封裝了字串相關的操作
內部實現和vector類似。操作介面上增加了字串的介面。
string是模板嗎?
實際上,string是模板,是被typedef出來的型別。 存在兩種字串:string和wstring(寬字串,unicode)
typedef basic_stringstring;
typedef basic_string, allocator> wstring;
5標準模板庫stl之map
學習資源《c語言/c++學習指南》語法篇(從入門到精通)》
STL 標準模板庫)
此篇只是乙個目錄,將分成單篇去完成 stl 主要有三個部分組成 容器,迭代器,演算法。順序容器 向量 vector 雙端佇列 dequeue 表 list ps copy 方法 關聯容器 集合 set 多重集合 multiset 對映 map 多重對映 multimap 容器介面卡 棧 stack ...
Stl(標準模板庫)
stl 標準模板庫 stl的目的是標準化元件,這樣就不用重新開發,可以使用現成的元件。我們常用到的stl容器有vector list deque map multimap set和multiset。1.簡單概括 如果需要高效的隨機訪問,不在乎插入和刪除的效率,使用vector 類似陣列 2 如果需要...
STL標準模板庫
stl標準模板庫 一。概述 c 內建的標準模板庫stl可以分為以下6大類 1.容器 2.迭代器 3.空間分配器 4.介面卡 5.演算法 6.仿函式 1.容器 概念 用來管理一組元素 分類 序列式容器 sequence containers 每個元素都有固定位置 取決於插入時機和地點,和元素值無關。v...