2019独角兽企业重金招聘Python工程师标准>>>

  1. C++模板简介
  2. 泛型编程
  3. 容器
  4. 一些进阶问题

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;
}
  1. 没有实例化之前,检查模板代码本身是否有语法错误
  2. 实例化期间,检查对模板代码的调用是否合法
  3. std::complex没有比较大小的功能‘>’
  4. 不允许自动型别的转化

Max(1,2.0) error
两种解决办法

  1. Max(static_cast(1),2.0)
  2. 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)---模板相关推荐

  1. C++标准库(STL)与泛型编程

    C++标准库(STL)与泛型编程 学习网站: cplusplus.com cppRerference.com 学习书籍: <STL源码剖析> STL体系结构基础介绍 STL六大部件:容器. ...

  2. C++STL与泛型编程__侯捷视频_学习博客_总目录

    C++STL与泛型编程 侯捷 (1): c++重要网站相关 C++STL与泛型编程(2) 第一个C++ STL Application: STL六大部件代码示例,容器前闭后开区间,auto关键字的用法 ...

  3. C++11新特性之泛型编程与模板

    模板 泛型编程 函数模板 普通函数模板 成员函数模板 函数模板重载 模板函数的特化 类模板 类模板中的成员函数模板 类模板的特化与偏特化 类模板成员特化 模板 Template所代表的泛型编程是C++ ...

  4. C++《STL和泛型编程》算法accumulate、for_each、sort简单使用例子

    <STL和泛型编程>算法accumulate.for_each.sort简单使用例子 一.算法accumulate 二.算法for_each 三.算法sort 一.算法accumulate ...

  5. STL和泛型编程_学习笔记01

    STL和泛型编程 本学习笔记是基于侯捷老师的STl和泛型编程课程 1. STL六大部件基础介绍 (Components) ​ 容器(Containers) ​ 分配器(Allocator) ​ 算法( ...

  6. C++ STL和泛型编程(四)----movable

    C++ STL和泛型编程(四)----movable 一.moveable对各容器的影响 二.moveable class 三.测试函数 一.moveable对各容器的影响 其对vector的影响表现 ...

  7. 泛型编程与模板元编程介绍(概念、优点)

    写在前面 今天来写点有点难度的东东:泛型编程与模板元编程. 写这种生僻的东东我是比较排斥的,但谁让我看到boost库中专门对这两个东东分了个大类别呢.开始吧~ 概念 不知道大家有没有过这种体验,学数学 ...

  8. C++之泛型编程(模板)

    1.模板综述 背景 有时候许多函数或子程序的逻辑结构是一样的,只是要处理的数据类型不一样 有时候多个类具有相同逻辑的成员函数和成员变量,只是成员变量的数据类型以及成员函数的参数类型不一样 模板就是解决 ...

  9. 初级C++STL:初阶模板 | String的使用

    文章目录 初级模板简介 函数模板 模板参数的匹配原则 类模板 STL标准模板库 string string类对象的访问及遍历操作 string类对象的容量操作 string类对象的修改操作 +=.in ...

最新文章

  1. ORA-01078与LRM-00109报错解决
  2. python二元表达式总结
  3. 接触网怎么区分t线f线_这个形态是一种庄家线,它是完全由庄家控盘造成的,散户需重视...
  4. 301转向和网址规范化
  5. 全排列代码python_python全排列代码,求解释
  6. pic10f220 c语言,PIC10F200 LED流水灯程序
  7. STM32F7xx —— 输入
  8. python 机器学习_基于 Python 语言的机器学习工具Sklearn
  9. 前端 linux ps,Linux ps命令
  10. Linux下查看系统版本号信息的方法(转)
  11. pandas获取索引行数据
  12. paip.python错误解决17
  13. 软件产品需求规格说明书模板
  14. DDD原著 -- 第一章 知识消化
  15. 约瑟夫生死者游戏_独立游戏从死者特许经营中夺冠时,游戏玩家获胜
  16. 解锁黑科技!辅助驾驶系统为卡车安全行驶保驾护航
  17. 寒武纪MLU270安装运行Pytorch yolov3实录
  18. 敲7数字100以内c语言,敲七游戏数字表怎么玩?
  19. 理科生浪漫java表白代码_数学公式表白-2020理科生专属浪漫表白句子大全
  20. 金蝶云苍穹Java笔试题_金蝶云苍穹基本操作及常见问题总结

热门文章

  1. Linux中perl脚本监控
  2. 按原有结构恢复被删除的FAT32文件夹
  3. ActiveMQ Transport Connectors
  4. js iframe是否加载完成,加载完成执行函数
  5. 蚌埠智慧城市建设跻身全国22强 让数据替群众“跑腿”
  6. 算法(Algorithms)第4版 练习 1.3.11
  7. ConcurrentHashMap总结
  8. 为自己给操作系统留个后门?我的安全管理经验谈
  9. ISA2006标准版安装及无人值守安装
  10. 天天向上 专访Data Domain创始人李凯