STL(Standard Template Library)即标准模板库,善用STL库,能有效的减少代码量,提高程序执行效率。
本文旨在介绍STL的string与vector。


string 字符串

  1. 头文件
    1
    #include<string>///注意不要与#include<cstring>混淆
  2. string的创建与初始化
    1
    2
    3
    4
    5
    6
    string s1;///创建空字符串s1
    string s2(10, 'a');///创建s2,它由10个a构成,即"aaaaaaaaaa"
    string s3("kagarise");///创建s3,即"kagarise",等效于string s3 = "kagarise"
    string s4(s3);///创建s4 = s3;
    string s5(s3, 0, 6);///创建s5,s5 = "kagari",即在s3上从第0位开始截取6位
    string s6(s3, 2);///创建s6,s6 = "garise",即在s3上从第2位开始截取到字符串末位
  3. string的基本用法
    string相较于c语言中的字符数组的一个方便的地方在于它可以用==,<,>,<=,>=,!=甚至+,+=这些基本运算符来操作字符串,而不必用strcmp等函数来判断字符串。并且string可以像字符数组一样用[]下标访问。
    1
    2
    3
    4
    5
    6
    7
    8
    string s1 = "kagarise", s2 = "flora";

    if(s1 < s2)///判断s1,s2的字典序大小,==和>等操作同理
    cout << s1 << endl;

    string ss = s1 + " and " + s2;///创建一个新的字符串ss = "kagarise and flora"

    char s1_6 = s1[4];///字符s1_6保存了s1中的第4位字符,即'r'
  4. string常用函数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    string s = "kagarise", s1 = "flora";

    s.size();///用来获取字符串s的长度,同样的,可用s.length()

    s.erase(2);///删除字符串s从下标2及之后的所有字符,即"ka"
    s.erase(2, 3);///删除字符串s从下标2开始,删除个字符,即"karise"

    s.replace(2, 5, s1);///替换字符串s下标从2-5为s1,即"kaflorase"

    s.substr(2, 3);///截取字符串s从下标为2开始,长度为3的字串,即"gar"
    s.substr(2);///截取字符串s从下标为2开始到字符串末位的字串,即"garise"

    s.find("ar");///在字符串中查找字符串"ar"第一次出现的位置
    ///若能找到,返回"ar"第一次出现的下标;反之返回string::npos,也可用-1来判定
    s.find("ar", 5);///从下标5开始查找"ar"
    s.find("ar", 5, 7)///在5-7的范围内查找"ar"
    s.rfind("ar");///从字符串尾部开始查找"ar"

    reverse(s.begin(), s.end());///翻转字符串从开头到结尾,即"esiragak"
    ///s.begin(),s.end()分别返回的是s的开始迭代器、结束迭代器

    vector 向量/不定长数组

  5. 头文件
    1
    #include<vector>
  6. vector的创建与初始化
    创建的vector存储的元素由<>里的数据类型决定。
    1
    2
    3
    4
    vector<int> v;///创建空v
    vector<int> v1(10);///创建v1,长度为10
    vector<int> v2(10, 1);///创建v2,长度为10,且每个元素都为1
    vector<int> v3 = v2;///创建v3 = v2
  7. vector的基本用法
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    vector<int> v(10, 1);

    v.size();///返回v中元素个数
    v.clear();///清空v

    v.push_back(3);///往v尾部添加一个元素3
    v.pop_back();///删除末尾元素

    ///vector可以像数组一样用[]下标访问,也可以用迭代器访问
    for(int i = 0; i < 10; i++)
    cout << v[i] << endl;
    for(vector<int>::it = v.begin(); it != v.end(); it++)
    cout << *it << endl;
  8. vector常用函数
    vector就像一个数组一样,数组能完成的事情,vector同样也能完成。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ///排序数组
    sort();

    ///二分查找
    lower_bound();
    upper_bound();

    ///翻转
    reverse();