C++学习笔记——模板编程
文章目录
C++学习笔记——模板编程
视频链接
【系统开发】 C++系统工程师(入门到进阶/适合有一定基础)
P1 模板观念与函数模板
- 类模板
- 函数模板:一族函数
- 函数模板也可以重载
- 模板实例化:模板的声明只提供了一个函数或者类的语法框架;实例化是指从模板构建出一个真正的函数或类的过程;编译时实例化,编译两次,第一次检查模板正确性,第二次检查实例化正确性
- 隐式实例化
- 显式实例化
P2类模板与操作符重载
- 类模板实参可以是某一型别或常数(int或枚举)
- 类模板特化,偏特化
- 默认模板实参
- C++操作符重载
- 大多数内置操作符都可以重载;不能定义新的操作符
- 不能对内置类型重载操作符
P3 泛型编程
- 概观
- 泛型是一种编程思想、方法
- C++中的泛型是通过模板实现的
- Traits(关联)
- 迭代器
- 指针的泛化,本身是一个对象,指向另一个可以被迭代的对象
- 在STL中迭代器是容器与算法之间的接口
- 分离算法与容器,粘合不同的算法和容器
P4 容器
- vector
- 能存放任意型别的动态数组
- 在内存中的表现形式是一段地址连续的空间
- operator[]不做边界检查,可能越界,但访问效率高;at()执行边界检查,访问越界则抛出异常,但访问效率不如operator[]
- erase
- 用法一:指定iterator删除某一元素
- 用法二:通过条件函数找到需要删除的元素(remove_if)
- deque:与vector内存分配方式不同
- List:双向链表
P5 STL整体结构,仿函数,仿函数适配器,binder1st
- STL整体结构
- 仿函数
- 函数对象,作用相当于一个函数指针,普通指针不能满足STL的抽象要求,
- 将某种行为作为算法的参数
- 仿函数适配器
- 将无法匹配的仿函数“套接”成可以匹配的型别
- 其它值得注意的问题
P6 binder2nd,mem_fun,mem_fun_ref
P8 泛型算法——非变易算法
- 非变易算法:不改变操作对象的前提下处理元素,例如查找、统计
P9 泛型算法——变易算法
- 变易算法:改变容器中对象
P10 泛型算法——排序
- sort,partial_sort,binary_search
- includes,set_union,set_difference,set_intersection
- make_heap,push_heap,pop_heap,sort_heap
P11 泛型算法——数值算法
- accumulate,inner_product,partial_sum,adjacent——difference