STL

发布时间 2023-06-20 00:03:05作者: Ifyoung

STL应用

容器通用函数如下。

  • .size():容器内的元素个数,无符号整型。

  • .empty():判断容器是否为空,返回一个bool值。

  • .front():返回容器第一个元素。

  • .back():返回容器最后一个元素。

  • .begin():指向容器第一个元素的指针。

  • .end():指向容器最后一个元素的下一个位置的指针。

  • .swap(b):交换两个容器的内容。

  • ::interator:迭代器。

迭代器

广义的指针,可以是指针,也可以是对其进行类似指针操作的对象。模板使算法独立于存储的数据类型,而迭代器使算法独立于使用的容器类型。

例如,使用迭代器输出vector容器中的元素,代码如下。

for (vector <int> ::interator it = a.begin(); it != a.end(); it ++ )
    cout << *it << endl;

1. vector

vector(向量)是一个封装了 动态大小 数组的顺序容器(Sequence Container)。顺序容器中的元素按照严格的 线性顺序 排序,可以通过元素在序列中的位置访问对应的元素,支持数组表示法和随机访问。vector使用一个内存分配器动态处理存储需求。

  1. 创建。vector能够存放各种类型的对象,可以是C++标准数据类型,也可以是结构体类型。例如:

    vector <int> a;//创建一个空的vector,数据类型为int,数组名为a
    vector <int> a(100);//创建一个vector,数组名为a,元素个数为100,所有数的初值都为0
    vector <int> a(10, 666);//创建一个vector,数组名为a,元素个数为10,所有数的初值都为666
    vector <int> b(a);//b是a的复制
    vector <int> b(a.begin() + 3, a.end() - 3);//复制[a.begin() + 3, a.end() - 3)区间内的元素到vector中
    

    创建二维数组:

    vector <int> a[5];//相当于创建了5个vector,每一个都是一个数组
    
  2. 增加。向vector中添加元素,可以从 尾部 添加,也可以从 中间 添加。需要注意的是,从中间插入时需要将插入位置之后的所有元素 后移 ,时间复杂度为 \(O(n)\) ,效率较低。

    a.push_back(5);//在向量尾部增加一个元素5
    a.insert(a.begin() + 1, 10);//在a.begin() + 1 指向元素前插入一个10
    a.insert(a.begin() + 1, 5, 10);//在a.begin() + 1 指向元素前插入5个10
    a.insert(a.begin() + 1, b, b + 3);//在a.begin() + 1 指向元素前插入b向量的区间元素
    
  3. 删除。可以删除 尾部 元素、 指定位置 的元素、 区间 ,还可以 清空 整个向量。

    a.pop_back();//删除向量中的最后一个元素
    a.erase(a.begin() + 1);//删除指定位置的元素
    a.erase(a.begin() + 3, a.end() - 3);//删除区间[first, last)中的元素
    a.clear();//清空向量
    
  4. 遍历。可以用数组表示法,也可以用迭代器对向量元素进行访问。

    for (int i = 0; i < a.size(); i ++ )
        cout << a[i] << "\t";
    for (vector <int> ::interator it = a.begin(); it < a.end(); it ++ )
        cout << *it << "\t";