template模板变量
在c++中,函数要接收参数的话就要先定义接收的参数的类型,而第一门语言是py的我始终觉得这很不通用,直到我学到了模板,
模板就是定义一个变量,这个变量代表的是如何一种类型,如 int string double 类型, 这样用在函数中当做变量的类型就很方便了,
template <typename T>
T add(T a, T b){
return a+b;
};
这个T模板变量可以是任何一种数据类型, 不过在同一个函数的模板上, 这个模板变量只能是固定的一种类型,如果,前面 形参变量 a 接收的是int 的话 , 那么形参b也要是int类型, 如果形参b 想要使用到其他的类型的话可以在这个函数上再添加一个模板变量,用来定义这个类型, 如:
template <typename T, typename E>
T add(T a, E b){
return a+b;
};
这时候就可以接收两个不同类型的变量了;
template 模板类
模板变量不仅可以定义在函数上, 也可以定义在类上, 如果定义在类上的时候, 创建类就要用<>给这个类的模板变量赋值类型的, 如:
template <typename ve, typename vs>
class My_vet{
public:
ve age = 10;
vs name = "laowang"
}
可以看到使用模板变量可以替代类型定义变量, 这样会更通用
initializer_list
除了变量类型外, 接收参数的个数也很让我疑惑,在py 中可以有*args 来接收多个参数, 这个args 是一个元组类型,可以通过拆包来获取到里面的数据, 在c++中也有接收多个参数的方法的, 那就是 initializer_list ,这个形参是一个数组类型的变量, 可以通过传递参数的时候定义这个数组有多少个容量
template <typename T, typename E>
T add(initializer_list<int> li){
for (auto i = li.begin(); i < li.end(); ++i) {
cout << *i << endl;
}
return a+b;
};
可以通过for 循环获取到数组中的数据
容器
容器就是有多个相同类型的数据放到一起,这个整体就是一个容器,容器的类型有 顺序容器 和 无序容器
顺序容器
所谓的顺序容器指的是,在容器的内部,元素的摆放是有顺序的。通常 vector
已经足以满足大部分开发了。
顺序容器可以通过容器的指针的位运算来获取到下一个容器的数据
常见的顺序容器:
string 与vector相似,尾部插入|删除速度快
array 固定大小数组,支持快速随机访问,不能添加和删除
vector 可变大小数组,支持快速随机访问,在尾部之外的位置插入和删除 速度慢
deque | queue 双端(区分前后)队列, 支持快速随机访问,两端插入和删除速度快forward_list 单向链表、只支持单向顺序访问,插入和删除快,查询和更新慢
list 与单向链表不同,它是双向链表,其他一样。