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使用一个内存分配器动态处理存储需求。
-
创建。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,每一个都是一个数组
-
增加。向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向量的区间元素
-
删除。可以删除 尾部 元素、 指定位置 的元素、 区间 ,还可以 清空 整个向量。
a.pop_back();//删除向量中的最后一个元素 a.erase(a.begin() + 1);//删除指定位置的元素 a.erase(a.begin() + 3, a.end() - 3);//删除区间[first, last)中的元素 a.clear();//清空向量
-
遍历。可以用数组表示法,也可以用迭代器对向量元素进行访问。
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";