STL与泛型编程 Week2 (Boolan) by Im4lish

1-源代码之分布(VC,GCC)
2-OOP(面向对象编程) vs. GP(泛型编程)
OOP试图将datas和methods联系在一起。数据和操作都放置在类中,数据是类本身的成员,方法通过类对象来调用。
例如

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

GP试图将datas和methods分开来。将methods设置为全局函数来接受数据。
例如

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函数。

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

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

特化

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

个数偏特化

/*
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*> {//接受指针参数
···
};

4-分配器
分配器底层由malloc,主要目的是为了节省内存空间,减少多余的overhead。
5-容器之间的实现关系与分类

容器

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深度探索
一般实现中,vector容器的容积以二倍的形式增长,而在增长的过程中,由于vector是一个连续容器,会有消去原来所占有内存的多余开销。
9-array&forword_list深度探索
array相对于内置数组提娜佳了容器的特性,可被用来完全替代数组。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容