stl学习,STL学习过程中的笔记

梳理STL学习过程中的笔记
学STL,首先要搞清楚什么是模板
函数模板
或者是用 都是一样的
template
int function(const T& a, const T& b)
{
... ...
}
template
inline int function(const T& a)
{
... ...
}
怎么使用呢?
直接填值就可以了
编译器根据值的类型进行判断,不用多操心
function(1, 2);
CString str1, str2;
function(str1, str2);
PS:
VC++中有文件,它就是C中的那个;
文件实际上只是在一个命名空间std中include了,这是因为C++要减少名称污染;
类模板
和函数模板完全一样 只是实例化的时候方式不同
实例化的时候 会被强制类型转换的
template
class Stack
{
push(T& a);
... ...
}
实例化
Stack m;
====================================================================
外界定义的和形参一样的 会在模板内部屏蔽掉
typedef double T
template
int function(T& a )
{
外界定义的T会被隐藏掉
}
内部不允许再次使用形参做变量名
template
int function(T& a )
{
typedef double T; // 非法
}
形参中每一种类型前面都要加typename或者class
template
template // 非法
class和typename可以互换使用 typename是标准C++ class相对比较陈旧 也就是有兼容性的
template
类型的子类型
T是一个类型 SubT是T类型的子类型
什么是子类型?
就是比如T是一个类
template
class Cls
{
typedef int SubT;
}
在定义的时候
template
T fun(T& a)
{
T::SubT* p; // 系统不知道SubT是子类型 会以为是T的静态成员变量 认为是两者的乘积(T::SubT)*(p)
}
所以要声明
template
T fun(T& a)
{
typename T::SubT* p; // SubT是一种类型
}
当然SubT也可以被另一种形参所笼罩
template
class Cls
{
typedef U SubT;
}
很无语吧!
===========================================================
现在看看非类型模板形参是怎么回事儿
Tags:  学习软件 工作学习网 粤语学习 存储过程 stl学习

延伸阅读

最新评论

发表评论