STL与泛型编程(1)---模板
2019独角兽企业重金招聘Python工程师标准>>>
- C++模板简介
- 泛型编程
- 容器
- 一些进阶问题
1.C++模板简介
1. C++模板概观
一个简单的例子:取两个数中较大值的函数Max
不得不针对不同的型别提供每一种型别的重载
int Max(int a,int b)
{return(a>b)?a:b;
}
long Max(long a,long b)
{return(a>b)?a:b;
}
char Max(char a,char b)
{return(a>b)?a:b;
}
如果使用模板:
则可以省去一堆冗余代码,从而将函数原型缩减到非常简洁的表达
template<typename T>T Max(T a,T b)
{return(a>b)?a:b;
}
2.实例化
- 显式实例化为上面的Max函数例子
2.C++函数模板
1.定义
template <typename T>
inline T Max(const T& a,const T& b)
{return(a>b)?a:b;
}
- 没有实例化之前,检查模板代码本身是否有语法错误
- 实例化期间,检查对模板代码的调用是否合法
- std::complex没有比较大小的功能‘>’
- 不允许自动型别的转化
Max(1,2.0) error
两种解决办法
- Max(static_cast(1),2.0)
- Max(1,2.0)
2.模板函数的使用
3.C++类模板
模板定义以关键字template开始,后接模板形参表
与调用函数模板形成对比,使用类模板时,必须为模板形参显式指定实参
每个模板类型形参前面必须带上关键字class或typename
《C++ primer》
一个类模板的例子:Stack
const std::size_t DefaultStackSize = 1024;
template<typename T,std::size_t n = DefaultStackSize> class Stack{
pulic:void Push(const T const& element);int Pop(T& element);int Top(T& element);
private:std::vector<T> m_Members;std::size_t m_nMaxSize = n;
}
- 模板实参也可以是一个int或enum型别的常量(此处是size_t,本质是int型别)
- 除了copy constructor,如果在类模板中需要使用到这个类本身,应该使用其完整的定义
Push函数定义:
要定义一个类模板的成员函数,则要指明其是一个模板函数
template <typename T,std::size_t nMaxSize>
void Stack<T,nMaxSize>::Push(const T const& element)
{if(m_Members.size()>= m_nMaxSize){//error handing...return;}m_Members.push_back(element);
}
4.操作符重载
版权声明:本文为博主原创文章,未经博主允许不得转载。
转载于:https://my.oschina.net/juedaiyuer/blog/513555
STL与泛型编程(1)---模板相关推荐
- C++标准库(STL)与泛型编程
C++标准库(STL)与泛型编程 学习网站: cplusplus.com cppRerference.com 学习书籍: <STL源码剖析> STL体系结构基础介绍 STL六大部件:容器. ...
- C++STL与泛型编程__侯捷视频_学习博客_总目录
C++STL与泛型编程 侯捷 (1): c++重要网站相关 C++STL与泛型编程(2) 第一个C++ STL Application: STL六大部件代码示例,容器前闭后开区间,auto关键字的用法 ...
- C++11新特性之泛型编程与模板
模板 泛型编程 函数模板 普通函数模板 成员函数模板 函数模板重载 模板函数的特化 类模板 类模板中的成员函数模板 类模板的特化与偏特化 类模板成员特化 模板 Template所代表的泛型编程是C++ ...
- C++《STL和泛型编程》算法accumulate、for_each、sort简单使用例子
<STL和泛型编程>算法accumulate.for_each.sort简单使用例子 一.算法accumulate 二.算法for_each 三.算法sort 一.算法accumulate ...
- STL和泛型编程_学习笔记01
STL和泛型编程 本学习笔记是基于侯捷老师的STl和泛型编程课程 1. STL六大部件基础介绍 (Components) 容器(Containers) 分配器(Allocator) 算法( ...
- C++ STL和泛型编程(四)----movable
C++ STL和泛型编程(四)----movable 一.moveable对各容器的影响 二.moveable class 三.测试函数 一.moveable对各容器的影响 其对vector的影响表现 ...
- 泛型编程与模板元编程介绍(概念、优点)
写在前面 今天来写点有点难度的东东:泛型编程与模板元编程. 写这种生僻的东东我是比较排斥的,但谁让我看到boost库中专门对这两个东东分了个大类别呢.开始吧~ 概念 不知道大家有没有过这种体验,学数学 ...
- C++之泛型编程(模板)
1.模板综述 背景 有时候许多函数或子程序的逻辑结构是一样的,只是要处理的数据类型不一样 有时候多个类具有相同逻辑的成员函数和成员变量,只是成员变量的数据类型以及成员函数的参数类型不一样 模板就是解决 ...
- 初级C++STL:初阶模板 | String的使用
文章目录 初级模板简介 函数模板 模板参数的匹配原则 类模板 STL标准模板库 string string类对象的访问及遍历操作 string类对象的容量操作 string类对象的修改操作 +=.in ...
最新文章
- ORA-01078与LRM-00109报错解决
- python二元表达式总结
- 接触网怎么区分t线f线_这个形态是一种庄家线,它是完全由庄家控盘造成的,散户需重视...
- 301转向和网址规范化
- 全排列代码python_python全排列代码,求解释
- pic10f220 c语言,PIC10F200 LED流水灯程序
- STM32F7xx —— 输入
- python 机器学习_基于 Python 语言的机器学习工具Sklearn
- 前端 linux ps,Linux ps命令
- Linux下查看系统版本号信息的方法(转)
- pandas获取索引行数据
- paip.python错误解决17
- 软件产品需求规格说明书模板
- DDD原著 -- 第一章 知识消化
- 约瑟夫生死者游戏_独立游戏从死者特许经营中夺冠时,游戏玩家获胜
- 解锁黑科技!辅助驾驶系统为卡车安全行驶保驾护航
- 寒武纪MLU270安装运行Pytorch yolov3实录
- 敲7数字100以内c语言,敲七游戏数字表怎么玩?
- 理科生浪漫java表白代码_数学公式表白-2020理科生专属浪漫表白句子大全
- 金蝶云苍穹Java笔试题_金蝶云苍穹基本操作及常见问题总结