STL的几种常见容器及其用法

vector

变长数组,包含在头文件 #include <vector> 当中。

思想:

操作系统在为某一个程序分配空间时,所需要的时间仅仅取决于申请空间的次数,与空间的大小没有关系。

所以vector使用倍增的思想,尽量减少申请空间的次数(尽管可能会因此消耗空间)。先申请一定大小的空间,如果不够就再copy一份,以此类推。平均每插入一个数所需的时间复杂度为 O(1)

vector的操作

1、内置函数

#include<vector>
vector<int> a,b;

//返回大小,时间复杂度为O(1)
a.size();
//返回a在内存中总共可以容纳的元素个数
a.capacity();

//返回a是否为空,空则返回true,非空则返回false
a.empty();

//清空a中元素
a.clear();

//返回a的第一个元素
a.front();
//返回a的最后一个元素
a.back();

//迭代器,指向a的第0个数
a.begin();
//迭代器,指向a的最后一个位置的后一个位置
a.end();
//将b的0-k个元素赋值给向量a
a.assign(b.begin(),b.begin()+k);


//在a的最后一个向量后插入一个元素,其值为x
a.push_back(x);
//删除a向量的最后一个元素
a.pop_back();

//删除a中0-k的元素
a.erase(a.begin(),a.begin()+k);

//在a的第k个元素(从第0个算起)位置插入数值x,
a.insert(a.begin()+k,x);
//在a的第k个元素(从第0个算起)位置插入n个数,其值都为x
a.insert(a.begin()+k,n,x);
//在a的第n个元素(从第n个元素算起)的位置插入b中0-n的元素(不包括k)
a.insert(a.begin()+n,b,b+k);

//将a的现有元素个数调整至10个,多则删,少则补,其值随机
a.resize(10);
//将a的现有元素个数调整至10个,多则删,少则补,其值为2
a.resize(10,2);

//b为向量,将a中的元素和b中的元素整体交换
a.swap(b);

2、遍历方式

//第一种下标遍历

for (int i = 0; i < a.size(); i++)        cout << a[i] << endl;

//第二种迭代器遍历

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

//第三种范围遍历

for(auto i:a)        cout << i << endl;

上一篇:矩阵乘法求解多项式递推问题


下一篇:3Blue1Brown系列:三维空间中的线性变换