C++ 模板函数
template<class T>
void MySwap( T&a , T& b){
T temp = a;
a = b ;
b = temp
}
上述函数为申明一个模板函数,需要注意:

  1. template只针对紧接着的一个函数有效,如果有两个模板函数,需要在第二个函数前面重新写一遍;
  2. 其中的class 可以写成 typename
  3. 显示的调用MySwap<int>(a,b)
  4. 模板函数可以重载,在函数调用的时候 ,优先考虑普通函数。若要指定调用模板函数,则加上尖括号即可。MySwap<>(a,b)
  5. 继承模板,如果继承的不是模板类,则需要指明数据类型,如class A:public father<int>; 如果继承模板类还是模板类,则不需要指明数据类型,如class A:public father<T>
  6. 防止头文件被重复包含,#program once 或者采用对应的宏
  7. hpp原因,由cpp演变而来,原因在于类模板的的函数实现写在了类的外面,即一个.h和一个cpp文件,但是在编译的时候,由于是模板函数,单独编译没有找到具体的实现。所以解决方案是包含对应的cpp文件,为了防止这个地方出现包含cpp的不和谐问题,将cpp改成hpp。
  8. 模板中的static关键词表示所有的对象共用。
  9. 命名空间必须全局作用域;命名空间里面可以有变量,类,结构体,函数;命名空间可以嵌套;命名空间可以随时添加;命名空间可以匿名(无名)使用,相当于static,即只能在当前文件下使用;命名空间可以起别名,即namespace A =B;
  10. C++对C语言的增强:全局变量的检测,int a; int a=10;在 C语言中编译通过,在C++中编译显示重定义;C++中struct可以添加函数,C语言struct中不可以;
  11. C语言中的局部const是伪常量,可以通过指针进行修改对应的值,而C++中的局部const是真常量,可以当做常量进行使用
  12. 当程序中存在有参的构造函数,则不在提供默认的构造函数,需要自行添加;如果不存在有参的构造函数,则存在默认的无参构造函数;
  13. 当程序中存在拷贝构造函数时, 则系统不在提供其他的构造函数了
  14. explicit 关键字作用是禁止隐式传递
  15. inline内连函数是为了解决宏的缺陷而提出的
    C++ STL 六大板块
  16. 容器
  17. 分配器
  18. 算法
  19. 迭代器
  20. 适配器
  21. 仿函式

vector<int, allocator>
其中尖括号表示模板
vector.begin() 表示容器中的第一个元素,而vector.end()表示容器中的最后一个元素的后面一个位置。称为前闭后开区间

容器 结构与分类

  1. 序列容器
  2. 关联容器
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐