1. 函数模版
函数模版和类模板,泛型编程
创建一个通用函数,其返回值和形式参数可以指定,用一个虚拟的类型代表。
语法:
template <typename T>
函数声明或定义
template<typename T>
void swapValue(T &a, T &b) {
T temp = a;
a = b;
b = temp;
}
typename可以替换为class。
2. 普通函数和模版函数的调用规则
如果普通函数和模版函数都可以调用,优先调用普通函数。
通过空模版参数列表可以强制调用模版函数。比如:swapValue<>(a, b)。
函数模版也可以发生函数重载。
如果函数模版能产生更好的匹配,优先调用函数模版。
3. 类模版
语法:
template<class T>
类
template<class NT, class AT>
class Person {
public:
Person(NT name, AT age) {
this->name = name;
this->age = age;
}
NT name;
AT age;
};
Person<string, int> p("ssd", 12);
类模版没有自动类型推导的使用方式。
类模版在模版参数列表中可以有默认参数类型。
类模版中的成员函数一开始不会创建,在调用时才去创建。
4. 类模版对象做函数参数
指定传入类,参数模版化,整个类模版化
5. 类模板与继承
class Child: public Person<string, int> {
};
template<class T1, class T2>
class Audlt: public Person<T1, T2> {
};
6. 类模版成员函数类外实现
template<class T1, class T2>
class Person {
public:
Person(T1 t1, T2 t2);
// {
// this->t1 = t1;
// this->t2 = t2;
// }
void showPerson();
// {
// cout << t1 << t2 << endl;
// }
T1 t1;
T2 t2;
};
template<class T1, class T2>
Person<T1, T2>:: Person(T1 t1, T2 t2) {
this->t1 = t1;
this->t2 = t2;
}
template<class T1, class T2>
void Person<T1, T2>::showPerson() {
cout << t1 << t2 << endl;
}
7. 标准模版库STL
STL可以分为六大组件:容器,算法,迭代器,仿函数,适配器,空间配置器。
8. vector数组
void test() {
// 创建数组
vector<int> v;
// 插入数据
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
// 迭代器
vector<int>::iterator itBegin = v.begin();
vector<int>::iterator itEnd = v.end();
// 遍历
while (itBegin != itEnd)
{
cout<< *itBegin << endl;
itBegin++;
}
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout<< *itBegin << endl;
}
for_each(v.begin(), v.end(), method);
}
9. string容器
char *是一个指针,string是一个类,内部封装了char *
string赋值操作:=号,assign
void test01() {
string s;
s = "123";
string s3;
s3 = s;
s3.assign("345");
string s1("111");
const char * str = "hello";
string s2(str);
}
字符串拼接:+=,append
void test02() {
string s;
s = "1";
s += "2";
s.append("3");
cout << s << endl;
}
字符串查找和替换:find, replace。
字符串比较compare,返回值等于0表示相等,大于0表示大于,小于0表示小于。
字符存取,str[i] 和str.at(i)可以存取特定位置的字符。
insert和erase可以插入和删除字符串。
substr获取子串
9. vector数组
vector可以动态扩展。