C++学习--侯捷,黑马
C++ STL 六大板块容器分配器算法迭代器适配器仿函式vector<int, allocator>其中尖括号表示模板vector.begin() 表示容器中的第一个元素,而vector.end()表示容器中的最后一个元素的后面一个位置。称为前闭后开区间容器 结构与分类序列容器关联容器...
·
C++ 模板函数
template<class T>
void MySwap( T&a , T& b){
T temp = a;
a = b ;
b = temp
}
上述函数为申明一个模板函数,需要注意:
- template只针对紧接着的一个函数有效,如果有两个模板函数,需要在第二个函数前面重新写一遍;
- 其中的class 可以写成 typename
- 显示的调用MySwap<int>(a,b)
- 模板函数可以重载,在函数调用的时候 ,优先考虑普通函数。若要指定调用模板函数,则加上尖括号即可。MySwap<>(a,b)
- 继承模板,如果继承的不是模板类,则需要指明数据类型,如class A:public father<int>; 如果继承模板类还是模板类,则不需要指明数据类型,如class A:public father<T>
- 防止头文件被重复包含,#program once 或者采用对应的宏
- hpp原因,由cpp演变而来,原因在于类模板的的函数实现写在了类的外面,即一个.h和一个cpp文件,但是在编译的时候,由于是模板函数,单独编译没有找到具体的实现。所以解决方案是包含对应的cpp文件,为了防止这个地方出现包含cpp的不和谐问题,将cpp改成hpp。
- 模板中的static关键词表示所有的对象共用。
- 命名空间必须全局作用域;命名空间里面可以有变量,类,结构体,函数;命名空间可以嵌套;命名空间可以随时添加;命名空间可以匿名(无名)使用,相当于static,即只能在当前文件下使用;命名空间可以起别名,即namespace A =B;
- C++对C语言的增强:全局变量的检测,int a; int a=10;在 C语言中编译通过,在C++中编译显示重定义;C++中struct可以添加函数,C语言struct中不可以;
- C语言中的局部const是伪常量,可以通过指针进行修改对应的值,而C++中的局部const是真常量,可以当做常量进行使用
- 当程序中存在有参的构造函数,则不在提供默认的构造函数,需要自行添加;如果不存在有参的构造函数,则存在默认的无参构造函数;
- 当程序中存在拷贝构造函数时, 则系统不在提供其他的构造函数了
- explicit 关键字作用是禁止隐式传递
- inline内连函数是为了解决宏的缺陷而提出的
C++ STL 六大板块 - 容器
- 分配器
- 算法
- 迭代器
- 适配器
- 仿函式
vector<int, allocator>
其中尖括号表示模板
vector.begin() 表示容器中的第一个元素,而vector.end()表示容器中的最后一个元素的后面一个位置。称为前闭后开区间
容器 结构与分类
- 序列容器
- 关联容器
更多推荐
已为社区贡献1条内容
所有评论(0)