模板与STL学习简单的笔记
C/C++是一种静态编程语言,必须需要把代码翻译成可执行的二进制可执行程序然后再运行,一旦编译好之后就不能再变了(数据类型也就必须确定下无法更改,因此要为每一种数据类型编写一份算法,工程量巨大)。
void qsort(void *base, size_t nmemb, size_t size,int(*compar)(const void *, const void *));
template <typename T,typename M>
T max(T num1,M num1)
{
return num1>num2?num1:num2;
}
T被称作模板的类型参数,可以叫任何名字,只是俗成约定叫作T。
它指的是函数调用时的任何类型的参数。
虽然模板的类型可以是任意的,但是必须要支持模板函数中所使用到的运算符,因此模板不是成能的,虽然能带来很多好处,但也带来了很多问题。
1、模板的实例化
编译器不会把函数模板编译成一个实例,而是根据调用时的参数,再进行实例化(进一步生成二进制指令)。
模板只有在调用时才会实例化,因此模板编译正确并不代码没有问题,很多错误会产生于调用时。
第一次是检查模板的语法,第二次编译是根据调用参数把模板实例化出来然后再检查运算符是否支持这种类型。
a、使用函数模板时可以根据参数的类型来推断模板的参数
1、默认值什么放在右边
2、C++标准才支持:-std=c++0x
1、同一种格式的函数和函数模板是可以共生,但优先调用普通函数,但可以有函数名后添加一个空的<>指定调用函数模板,模板参数根据调用时的参数推断。
2、普通函数在调用时可以进行类型提升,但是这种提升的结果要低于模板的实例化。
a、类模板的语法
类模板的参数可以在类中当作类型使用,可以定义成员、返回值、参数等。
template<class T,class A,class B,...>
class className
{
C c;
public:
T func(A a);
};
注意:typename也可以继续使用,但大多用class以示区别。
类模板必须要经过实例化才能使用,也是需要经过两次编译,第一次是把类模板编译成一个"套路",这个过程是为了检查语法,第二次是根据实例化参数,生成一个类,然后才能使用这个类创建对象。
className<type1,type2,...> a;
template<class T> int MyStack<T>::num = 10;
静态成员必须在类模板实例化之后才被真正定义出来,每个实例化的类都有和份静态成员,这个实例化类创建出的对象共用一个静态成员。
MyStack<MyStack<int>> stack;
尽量不要轻易使用。
特化:指的是当类模板有特殊的类型无法处理时,可以为这种特殊类型单独实例化出一个类,这种单独的实现叫作模板的特化。
template<> class className <char*>
{
...
};
template<> 返回值 className<char*>::max(void)
{
...
}
template<class A,class B> class N
{public:N(void){cout <<""<<endl;}};
template<class A> class N <A,A>
{public:N(void){cout <<""<<endl;}};
template<class A> class N <A,short>
{public:N(void){cout <<""<<endl;}};
template<class A> class N <A*,A*>
{public:N(void){cout <<""<<endl;}};
template<class A,class B> class N <A*,B*>
{public:N(void){cout <<""<<endl;}};
1、类模板的参数可以有默认值
注意:使用类模板默认值时,<>不能省略,可以空着,但不能不写。
2、类模板后面的参数可以调用前面的参数。
注意:只能是常量才能进行实例化。
模板与STL学习简单的笔记的更多相关文章
- 标准模板库(STL)学习探究之vector容器
		标准模板库(STL)学习探究之vector容器 C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ... 
- 标准模板库(STL)学习探究之stack
		标准模板库(STL)学习探究之stack queue priority_queue list map/multimap dequeue string 
- 标准模板库(STL)学习指南之sort排序
		对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思 ... 
- 标准模板库(STL)学习指南之List链表
		本文转载自天极网,原文地址:http://www.yesky.com/255/1910755.shtml.转载请注明 什么是STL呢?STL就是Standard Template Library,标准 ... 
- 标准模板库(STL)学习指南之priority_queue优先队列
		转载自CSDN博客:http://blog.csdn.net/suwei19870312/article/details/5294016 priority_queue 调用 STL里面的 make_h ... 
- 标准模板库(STL)学习指南之set集合
		set是关联容器.其键值就是实值,实值就是键值,不可以有重复,所以我们不能通过set的迭代器来改变set的元素的值,set拥有和list相同的特性:当对他进行插入和删除操作的时候,操作之前的迭代器依然 ... 
- 标准模板库(STL)学习指南之map映射
		转载自CSDN博客:http://blog.csdn.net/bat603/article/details/1456141 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关 ... 
- 标准模板库(STL)学习指南之vector向量
		vector – 一. vector可以模拟动态数组 – 二. vector的元素可以是任意类型T,但必须具备赋值和拷贝能力(具有public 拷贝构造函数和重载的赋值操作符) 三.必须包含的头文 ... 
- 标准模板库(STL)学习探究之Multimap容器
		C++ Multimaps和maps很相似,但是MultiMaps允许重复的元素.(具体用法请参考map容器) 函数列表: begin() 返回指向第一个元素的迭代器 cle ... 
随机推荐
- Python -- Gui编程 -- Win32API的使用
			消息框 messageBox.py import win32api, win32con win32api.MessageBox(0, 'Hello World!', 'Come Here', win3 ... 
- 详解C#委托和事件(一)
			委托(Delegate)是安全封装方法的类型,类似于C和C++中的函数指针,与函数指针不同的是,委托是面向对象的.类型安全的和可靠的: 一.委托类型是CTS中五种基础类型之一,是一种引用类型,表示对具 ... 
- mysql 导出数据到csv文件的命令
			1.导出本地数据库数据到本地文件 mysql -A service_db -h your_host -utest -ptest mysql> select * from t_apps where ... 
- golang基础--reflect反射
			反射的知识点比较晦涩,后期会对此知识点展开深入的分析及示例代码展示 反射可达大提高程序的灵活性,使得inferface{}有更大的发挥余地 反射使用TypeOf和ValueOf函数从接口中获取目标对象 ... 
- [BZOJ 2655]calc
			Description 题库链接 给出 \(A,n,p\) ,让你在模 \(p\) 意义下求所有序列 \(a\) 满足"长度为 \(n\) 且 \(a_i\in[1,A]\) ,并且对于 \ ... 
- MVC部分视图
			// 以视图名使用当前文件夹下的视图 // 如果没有找到,则搜索 Shared 文件夹 @Html.Partial("ViewName") @Html.Partial(“视图” ... 
- Winform无边框窗体拖动
			调用示例 当然,BUG还是有的,不过基本需求倒也可以 
- __block和__weak修饰符的区别
			block下循环引用的问题 __block本身并不能避免循环引用,避免循环引用需要在block内部把__block修饰的obj置为nil __weak可以避免循环引用,但是其会导致外部对象释放了之后, ... 
- IDEA 2019注册码
			N757JE0KCT-eyJsaWNlbnNlSWQiOiJONzU3SkUwS0NUIiwibGljZW5zZWVOYW1lIjoid3UgYW5qdW4iLCJhc3NpZ25lZU5hbWUiO ... 
- fuz 2159 WuYou
			Problem 2159 WuYou Accept: 16 Submit: 64Time Limit: 1000 mSec Memory Limit : 32768 KB Problem ... 
