1-源代碼之分布(VC,GCC)
2-OOP(面向?qū)ο缶幊蹋?vs. GP(泛型編程)
OOP試圖將datas和methods聯(lián)系在一起。數(shù)據(jù)和操作都放置在類中橱脸,數(shù)據(jù)是類本身的成員,方法通過(guò)類對(duì)象來(lái)調(diào)用分苇。
例如
template <class T,
class Alloc = alloc>
class list {
···
void sort()
};
///每一個(gè)容器元素各帶有一個(gè)sort方法
GP試圖將datas和methods分開(kāi)來(lái)添诉。將methods設(shè)置為全局函數(shù)來(lái)接受數(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)
{
···
}
//不止以上兩個(gè)容器医寿,凡是只要提供了_RandomAccessIterator 的容器均可以使用該sort函數(shù)栏赴。
采用GP可以得到低耦合度的代碼。
3-技術(shù)基礎(chǔ):操作符重載and模板(泛化靖秩、全特化须眷、偏特化)
泛化
template <class T>
class xxx {
···
};
特化
template<> class xxx<x> {
···
};
個(gè)數(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é)省內(nèi)存空間,減少多余的overhead柒爸。
5-容器之間的實(shí)現(xiàn)關(guān)系與分類
6-深度探索list
list容器是一種包含前驅(qū)指針和后向指針的雙向鏈表准浴。
7-迭代器的設(shè)計(jì)原則和Iterator Traits的作用與設(shè)計(jì)
Iterator必須提供5種的associate types
typedef xxx iterator_category;
typedef T value_type;
typedef Ptr pointer;
typedef Ref reference;
typedef ptrdiff_t difference_type;
8-vector深度探索
一般實(shí)現(xiàn)中,vector容器的容積以二倍的形式增長(zhǎng)捎稚,而在增長(zhǎng)的過(guò)程中乐横,由于vector是一個(gè)連續(xù)容器,會(huì)有消去原來(lái)所占有內(nèi)存的多余開(kāi)銷今野。
9-array&forword_list深度探索
array相對(duì)于內(nèi)置數(shù)組提娜佳了容器的特性葡公,可被用來(lái)完全替代數(shù)組。