stl(standard template library)是c++的標準模板庫
容器(containers):由個各種資料結構組成,包括vector,list,deque,set,map等,用來存放資料。從實現角度來講,stl容器是一種class template;
演算法(algorithms):由各種演算法組成,包括sort,search,copy,erase等,從實現角度來講,stl演算法適合一種function template;
迭代器(iterators):是鏈結容器和演算法的橋梁,是一種「泛化指標」。從實現角度來講,迭代器是一種講operator*,operator->,operator++,operator--等相關操作過載的class template;
仿函式(functors):是一種行為像函式的類,一般作為演算法的某種策略。從實現的角度來講,仿函式是一種過載了operator()的class template;
介面卡(adapters):一種用來修飾仿函式或容器或迭代器介面的東西,如stl中的queue和stack,雖然是容器,其實內部都是呼叫deque來實現的,是一種介面卡;
分配器(allocator):負責空間配置與管理,從實現的角度來講,分配器是乙個實現動態空間配置、管理、釋放的class template;包括容器分類器,迭代器分類器,仿函式分配器;
空間分配器是stl最底層的東西,我們使用時預設都是呼叫封裝好的介面;
sgi stl專屬空間分配器(alloc),與stl分配器(allocator)標準規範由不同;
sgi stl的每個容器都已經指定預設的空間分配器是alloc
template //預設使用alloc分配器
class vector;
在c++中,當我們呼叫new和delete進行物件建立和銷毀時,同時也會由記憶體分配操作和釋放操作:
class test;
test *pf = new test; //分配記憶體,然後構造物件
···delete pf; //析構物件,然後釋放記憶體
new和delete操作都包含兩個階段的操作:
new:編譯器會先呼叫::operator new分配記憶體;然後呼叫obj::obj()構造物件內容;
delete:編譯器會先呼叫obj::~obj()析構物件;然後呼叫::operator delete釋放空間;
stl allocator講這兩個階段操作區分開:
stl分配器定義在中,如下圖所示
construst()和destroy()原始碼
//以下是construct()函式
#include template inline void construct(t1 *p,const t2& value)
//以下是destroy()函式第一版本
template //第一版本,接受乙個指標
inline void destroy(t *pointer)
//以下是destroy()函式第二版本,接受兩個迭代器
template inline void destory(forwarditerator first,forwarditerator last)
//判斷元素的數值型別(value type)是否重要(trivial destructor)
template inline void __destroy(forwarditerator first,forwarditerator last,t*)
//如果是重要的(non-trivial destructor)的
template inline void __destroy_aux(forwarditerator first,forwarditerator last,__false_type)
c++library(std::allocator)
c++promitives(new,new,new(),::operator new(),...)
crt(malloc/free)
o.s.api
關係型容器與序列型容器
stl空間分配器原始碼詳解
走進stl空間分配器
未完,待續。。。
STL相關知識
c 的標準模板庫 standard template library,簡稱stl 是乙個容器和演算法的類庫。容器往往包含同一型別的資料。stl中比較常用的容器是vector,set和map等。vectore 乙個vector類似於乙個動態的一維陣列,vector中可以存在重複的元素!1 宣告 1 v...
STL容器相關
順序容器 順序容器有以下三種 可變長動態陣列 vector 雙端佇列 deque 雙向鍊錶 list。它們之所以被稱為順序容器,是因為元素在容器中的位置同元素的值無關,即容器不是排序的。將元素插入容器時,指定在什麼位置 尾部 頭部或中間某處 插入,元素就會位於什麼位置。關聯容器 關聯容器有以下四種 ...
STL基礎總結
stl vector 不定長陣列 宣告 vectora vectorb vectorc a.size 讀取它的大小 a.push back x 向尾部新增x a.resize x 改變大小,改為x a.pop back 刪除最後乙個元素 a.cllear 清空 a.empty 測試是否為空 排序 s...