STL相關基礎

2021-10-10 03:26:43 字數 2429 閱讀 3853

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...