C++基础-part2(模版和STL)

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可以动态扩展。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容