C++快速入门3

88 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

函数模板

通用算法:函数模板,也成泛型算法。

用template关键字增加一个模板头,将数据类型变成类型模板参数。

#include<iostream>

using namespace std;

template<typename T>
T add(T x, T y){
    return x + y;
}
int main(){
    cout << add<int>(5, 3) << endl;
    return 0;
}

函数模板本身不是函数,之后模板实例化产生具体的函数

这里会产生一个int版本的函数

模板参数也可以自动推断:

#include<iostream>

using namespace std;

template<typename T>
T add(T x, T y){
    return x + y;
}
int main(){
    cout << add<int>(5, 3) << endl;
    cout << add(2.2, 1.1) << endl;
    //cout << add(5, 1.1) << endl; //(×)歧义,所以要指明
    cout << add<double>(5, 1.1) << endl;
    return 0;
}

string、vector

string

是一个用户定义类型,初始化方法:

#include<iostream>
#include<string>
using namespace std;

int main(){
    string s1 = "aaa";
    string s2("bbb");
    string s3{"ccc"};
    cout << s1 << s2 << s3;
    return 0;
}

aaabbbccc

一些方法:

#include<iostream>
#include<string>
using namespace std;

int main(){
    string s1 = "hello";
    string s2("world");
    cout << s1.size() << endl;
    string s3 = s2.substr(1, 3);
    cout << s3 << endl;
    cout << s1 + " " + s3 << endl;
    s1[0] = 'H';
    s2[0] = 'W';
    string s4 = s1.insert(3, "iii");
    cout << s4 + "  " << s2 << endl;
    cout << s4.find("ii") << endl;
    return 0;
}

5
orl
hello orl
Heliiilo World
3

vector

向量,类似于数组,但可以动态增长,要#include<vector>,注意也要std::vector

是一个类模板,实例化产生一个类,如:vector<int> v产生一个数据元素是int的vector<int> v类(向量),可以通过vector<int> v类对象去访问其成员,如成员函数。

#include<iostream>
#include<vector>
using namespace std;

int main(){
    vector<int> v = {1, 3, 5};
    for (int i = 0; i < v.size(); i++){
        cout << v[i] << '\t';
    }
    cout << endl;
    v.push_back(2);
    for (int i = 0; i < v.size(); i++){
        cout << v[i] << '\t';
    }
    cout << endl;
    v.pop_back();
    for (int i = 0; i < v.size(); i++){
        cout << v[i] << '\t';
    }
    v.resize(2);
    cout << endl;
    for (int i = 0; i < v.size(); i++){
        cout << v[i] << '\t';
    }
    cout << endl;
    v.resize(5);
    for (int i = 0; i < v.size(); i++){
        cout << v[i] << '\t';
    }
    return 0;
}

1 3 5
1 3 5 2
1 3 5
1 3
1 3 0 0 0

不过这里会有警告:warning: comparison between signed and unsigned integer expressions [-Wsign-compare],把i改成unsigned int就行