STL與泛型編程 Week2 (Boolan) by Im4lish

1-源代碼之分布(VC,GCC)
2-OOP(面向對象編程) vs. GP(泛型編程)
OOP試圖將datas和methods聯(lián)系在一起。數(shù)據(jù)和操作都放置在類中,數(shù)據(jù)是類本身的成員,方法通過類對象來調用。
例如

template <class T,
                 class Alloc = alloc>
class list {
···
    void sort()
  };
///每一個容器元素各帶有一個sort方法

GP試圖將datas和methods分開來。將methods設置為全局函數(shù)來接受數(shù)據(jù)。
例如

template <class T,
                 class Alloc = alloc>
class vector{
···
  };
template <class T,
                 class Alloc = alloc
                 size_t Bufsiz = 0>
class deque{
···
  };
template<typename _RandomAccessIterator>
inline void 
sort(_RandomAccessIterator __first,
       _RandomAccessIterator  __last)
{
···
}
//不止以上兩個容器,凡是只要提供了_RandomAccessIterator  的容器均可以使用該sort函數(shù)。

采用GP可以得到低耦合度的代碼。
3-技術基礎:操作符重載and模板(泛化、全特化、偏特化)
泛化

template <class T>
class xxx {
···
};

特化

template<> class xxx<x> {
···
};

個數(shù)偏特化

/*
template <class T, class Alloc = alloc>
class vector
{
···
};
*/
template<class Alloc>
class vector<bool, Alloc>
{
···
};

范圍偏特化

template <class T>
class xxx {
···
};
template <class T>
class xxx<T*> {//接受指針參數(shù)
···
};

4-分配器
分配器底層由malloc,主要目的是為了節(jié)省內存空間,減少多余的overhead。
5-容器之間的實現(xiàn)關系與分類

容器

6-深度探索list
list容器是一種包含前驅指針和后向指針的雙向鏈表。

7-迭代器的設計原則和Iterator Traits的作用與設計
Iterator必須提供5種的associate types

typedef xxx iterator_category;
typedef T    value_type;
typedef Ptr pointer;
typedef Ref reference;
typedef ptrdiff_t difference_type;
Iterator Traits的框架

8-vector深度探索
一般實現(xiàn)中,vector容器的容積以二倍的形式增長,而在增長的過程中,由于vector是一個連續(xù)容器,會有消去原來所占有內存的多余開銷。
9-array&forword_list深度探索
array相對于內置數(shù)組提娜佳了容器的特性,可被用來完全替代數(shù)組。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容