STL原始碼閱讀 九

2022-08-29 09:30:11 字數 1262 閱讀 2006

提供編譯時算術型別變數的屬性資訊。

數值陣列類

// valarray的元素選擇類

class slice

// slice作為角標號的幫助類

template class slice_array

}

// valarray的元素選擇類,可以選擇多組(形成多維陣列)

class gslice

template class gslice_array 

// 所定義的操作符類似於slice_array,只不過前者是多維的

// 在有效的下標處進行操作

template class mask_array

// 在指定的一些下標處進行操作

template class indirect_array

// valarray基類

template

struct _valarray_base

template

class valarray : private _valarray_base<_tp>

// 注意resize會先釋放原記憶體,然後再分配__n*sizeof(value_type)

// 大小的記憶體,並以__x初始化每個元素

void resize(size_t __n, value_type __x = value_type())

...}// 注意operator*是按照對應元素相乘的,不是向量乘。其它算術操作同理

template

inline valarray<_tp> operator*(const valarray<_tp>& __x,

const valarray<_tp>& __y)

// 返回乙個新的數值陣列,它的元素是原陣列平移n(正值向左,負值向右)後的元素的副本

template

valarray<_tp> valarray<_tp>::shift(int __n) const

else

return __tmp;

}// 迴圈平移陣列元素

template

valarray<_tp> valarray<_tp>::cshift(int __m) const

sgi stl

cppreference.com

STL 原始碼閱讀

1 這裡可以看出來,容器將迭代器作為類成員。vectora iteratorite a.begin 容器的成員函式可以返回迭代器,所以迭代器是容器的成員物件。2 個人理解,迭代器是對指標的封裝和提公升,盡可能遮蔽資料結構的底層細節,對外提供統一的操作介面,這些介面跟普通指標的功能類似,比如自增或自減...

STL原始碼閱讀 二

vector的記憶體分配基類 template class vector alloc base vector alloc base的偏特化版本,不需要儲存記憶體分配器 template class vector alloc base tp,allocator,true template struct...

STL原始碼閱讀 七

set使用紅黑樹實現,每個鍵值都不相同,且按序儲存。注意operator 即 rb tree的實現 先銷毀賦值號左邊的set,然後將右邊的set拷貝給左邊的set,而不是原值替換。set的所有函式都是用 rb tree的函式實現的,相當於 rb tree的乙個包裝類。multiset使用紅黑樹實現,...