C++学习笔记(6)——标准模板库STL之vector和list
一、动态数组vector
1.初始化
初始化为空:vector<int> v;
用另一个vector来初始化,即构造一个副本:vector<int> v(v1);
大小为n,并全部初始化为元素i :vector<int> v(n, i);
构造大小为n的容器,没有初始化里面的元素:vector<int> (n);
构造大小为4,并初始化里面的各个元素:vector<int> {1,2,3,4};
数组a[0]到a[5]的内容放进v:vector<int> v(a, a+5);
2.元素个数
v.size(); //返回容器中元素的个数,返回类型是int
v.capacity(); //返回容器中的容量,容器的预留空间也会计算在内
3.添加/插入元素
v.push_back(n); //将n加到容器末尾
v.insert(i, n); //将n插入到迭代器i指向的位置,并返回i
v.insert(i, i_first, i_end); //将其他容器上的区间[i_first,i_end)中的元素插入到迭代器i指向的位置,并返回i
4.删除元素
v.pop_back(); //删除容器末尾的元素
v.clear(); //删除所有元素
v.erase(i); //删除迭代器i指向的位置
v.erase(i_first, i_end); //删除容器上的区间[i_first, i_end)的元素
5.其他
v.empty(); //判断容器是否为空,空返回1,非空返回0
v.reverse(); //将容器v倒置
v.swap(_v); //容器v和_v交换
注意:没有find函数!!!
6.实例
1 |
|
二、双向链表list
注意:形如lst.begin()+2的语句会报错,因为list不支持根据下标随机存储元素。
1.初始化
初始化为空:list<int> lst;
用另一个list来初始化,即构造一个副本:list<int> lst(v1);
大小为n,并全部初始化为元素i :list<int> lst(n, i);
构造大小为n的容器,没有初始化里面的元素:list<int> (n);
构造大小为4,并初始化里面的各个元素:list<int> {1,2,3,4};
数组a[0]到a[5]的内容放进lst:list<int> v(a, a+5);
2.元素个数
lst.size(); //返回容器中元素的个数,返回类型是int
3.添加/插入元素
lst.pop_front(n); //删除最前面的元素
lst.push_front(n); //将n加到容器最前面
lst.push_back(n); //将n加到容器末尾
lst.insert(i, n); //将n插入到迭代器i指向的位置,并返回i
lst.insert(i, i_first, i_end); //将其他容器上的区间[i_first,i_end)中的元素插入到迭代器i指向的位置,并返回i
lst.splice(i, _lst); //在位置i前面插入链表_lst,并将链表_lst清空,注意,_lst和lst不能是同一个链表
lst.splice(i, _lst, _i); //在位置i前面添加链表_lst位置_i上的元素,并将链表_lst位置_i的元素删除,注意,_lst和lst可以是同一个链表
lst.splice(i, _lst, i_first, i_end); //在位置i前面插入链表_lst中的区间[i_first, i_end),并在链表_lst中删除该区间,注意,_lst和lst可以是同一个链表
lst.merge(_lst); //将链表_lst与lst合并,并清空_lst,注意,lst和_lst必须是有序的
5.其他
lst.sort(); //对链表从小到大排序
lst.empty(); //判断容器是否为空,空返回1,非空返回0
lst.swap(_lst); //容器lst和_lst交换
lst.reverse(); //将容器lst倒置
注意:没有find函数!!!
6.实例
1 |
|
三、双向队列deque
deque也是可变长数组,相比于vector,deque的最大优点是在头部添加或删除元素都比vector快,因此它有以下vector没有的成员函数:
d.push_front(n); //将n加到容器最前面
d.pop_front(n); //删除最前面的元素



