1、始于1989年,1997年完成,历时大约10年,标准程序库是C++标准规格的一部分,提供一些列的核心组件,用以支持IO、字符串、容器(数据结构)、算法(排序搜索合并等)、国别等主题。
2、不同组件背后有不同的设计理念,比如String class和STL差别,后者是一个数据结构和算法的Framework,String class是被设计为安全易用,接口不言自明,并可以做许多错误检测,而STL的设计目标是将不同的算法和数据结构结合在一起,并获取最佳的效率,所以并不是很方便,也不检验许多逻辑错误,所以必须通晓其概念原理才可以有效使用。
二、Template模板
1、Nontype Template 参数(非型别模板参数)
型别(type)可以作为Template的参数,非型别(nontype)也可以,比如bitset<>, 其中bit的位数以Template参数指定,
如:bitset<32> flag32; bitset<50> flag50;
即是用非型别(nontype)来初始化的,由于使用不同的参数,所以两者有不同的类型,不能相互赋值或比较。
2、缺省模板参数 Default template parameters
Template class可以有缺省参数,如
template< class T, class container = vector<T> > // 有空格,否则解释成>> Class MyClass;
如果只传一个参数,则缺省参数可以作为第二个参数使用,
MyClass<int> x1; 等同于
MyClass<int, vector<int> >
3、关键字typename
被用来做型别之前的标识符。如
template <class T> class MyClass { typename T::SubType * ptr; ... }
这里,SubType是Class T中定义的一个型别,因此,ptr是一个指向T::SubType型别的一个指针
若没有typename关键字,SubType则被解释为一个static成员。于是就变成了T中的一个SubType成员变量与ptr做
乘法了。
例如:
MyClass <Q> x;
的Q类必须有如下定义
class Q { typedef int SubType; // 或者Class SubType . . . }
class MyClass { ... template< class T > void fun(T); };
template <class T> class MyClass { private: T value; public : void assign( const MyClass<T>& x ) // x must have the same type as *this { value = x.value; } .... };
即是两个型别可以自动转换也不可以,如:
void f() { MyClass<int> ic; MyClass<double> dc; ic.assign( dc ); // error:!!!! }
template <class T> class MyClass { private : T value; public: template <class X> void assign( const MyClassType<X>& x ) // 允许二者不同 { value = x.getValue(); } T getValue() const { return value; } .... };
template <class T> class MyClass { public: template <class U> MyClass( const MyClass<U>& u ); .... }; void fun() { Myclass<double> xd; ... MyClass<double> xd2(xd); // call implicit(build-in) copy constructor MyClass<int> xi(xd); // call template constructor .... }
Related posts:
- const引用 – 一个C++小问题 今天开始就要进行一个月的嵌入式的培训了。 第一天,复习下C语言的基础知识,老师问了一个关于关键词const的问题。我被提问到,于是我就大致说了一下,估计他也没听懂。 快下课的时候老师写了两行代码,然后什么也没说,直接说这样可以这样不可以。估计他也没懂。 例子是<<C++ Primer>> P49关于const引用的问题。...
- Calling Convention – 调用规范(约定) [整理] 转载,原文地址: http://blog.csdn.net/yc_8301/archive/2007/10/08/1814744.aspx 首先,__thiscall是关于类的一种调用方式,它与其他调用方式的最大区别是: __thiscall对每个函数都增加了一个类指针参数 class aa { ...
以上关联文章由 Yet Another Related Posts Plugin 提供支持。
Tags: C++ STL
nice post. thanks.
有空我也研究一下