提供編譯時算術型別變數的屬性資訊。
數值陣列類
// 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使用紅黑樹實現,...