List是将元素按顺序存储在链表中,与vector的使用很类似,但是它比vector能更为方便的插入和删除。但是随机访问时比较慢的。
【文件包含】
#include<list>
using namespace std;
注意:list它是双向链表
【list操作】
一:初始化
list <int> l1;//对象l1的size=0
list <int> l2(5);//对象l2的size=5,元素是0(vs2013环境)
list <int> l3(5,5);//对象l3的size=5,每个元素是5
常用操作:
assign();给链表赋值,将新内容分配给列表容器,替换其当前内容,并相应地修改其大小。
list<int>l0;
l0.assign(3, 2);
empty();判断链表是否为空
front();返回链表的头一个元素
back();返回连边的最后一个元素
注意:如果链表为空时,使用front()和back()会怎么样呢?此时程序编译没问题,但是会出错:
begin();返回第一个元素的迭代器
end();返回嘴一个元素的下一个位置的迭代器
push_back();在链表后面插入元素
pop_back();删除最后一个元素
push_front();在链表头部插入元素
pop_front();删除第一个元素
例如:打印链表
list<int>l;
l.push_back(1);//插入1
l.push_back(2);//插入2
l.push_back(3);//插入3
l.push_back(4);//插入4
l.pop_back();//删除4
l.pop_front();//删除1
l.push_front(1);//在最前面插入1
list<int>::iterator it = l.begin();//定义迭代器it,表示第一个位置
while (it!=l.end())
{
cout << *it << " ";
++it;
}
//输出1 2 3
list::erase;删除元素
iterator erase (iterator pos);删除位置元素
iterator erase (iterator first, iterator last);删除位置区间 [ frist,last )(左闭右开)的元素
l.erase(l.begin(), l.end());//删除所有元素
list::insert;
iterator insert (iterator position, const value_type& val);
void insert (iterator position, size_type n, const value_type& val);
void insert (iterator position, InputIterator first, InputIterator last);
l1.insert(l1.begin(), 100);//在l1的开始位置插入100
l1.insert(l1.begin(), 2, 100);//在l1的开始位置插入2个100
l1.insert(l1.begin(), l2.begin(), l2.end())//在l1的开始位置插入l2的开始到结束的所有元素
size();返回链表中元素的个数
max_size();返回list能容纳的最大元素大小
list<int>l;
l.push_back(1);
l.push_back(2);
l.push_back(3);
l.push_back(4);
cout << l.size() << endl;
cout << l.max_size()<<endl;
merge();合并两个有序链表
list<int> l1;
l1.push_back(1);
l1.push_back(2);
l1.push_back(3);
print_list(l1);
list<int> l2;
l2.push_back(4);
l2.push_back(5);
l2.push_back(6);
l1.merge(l2);//会清空l2
print_list(l1);
print_list(l2);
remove();从list删除指定元素,如果该元素存在,则将list中的所有该元素删除,如果不存在,则不发生任何变化
list<int> l1;
l1.push_back(1);
l1.push_back(4);
l1.push_back(2);
l1.push_back(4);
l1.push_back(3);
l1.push_back(4);
print_list(l1);
l1.remove(4);
print_list(l1);
l1.remove(40);
print_list(l1);
resize():改变list的大小
reverse():把list的元素逆置
sort():给list排序
swap():交换两个list
unique():删除list中重复的元素
list<int> l1;
l1.push_back(3);
l1.push_back(1);
l1.push_back(2);
l1.push_back(4);
l1.push_back(4);
l1.push_back(2);
print_list(l1);
list<int> l2;
l2.push_back(4);
l2.push_back(5);
l2.push_back(6);
l1.resize(8);//将l1大小改为8
cout << l1.size() << endl;
l1.reverse(); //逆置l1
print_list(l1);
l1.sort(); //给l1排序
print_list(l1);
l1.swap(l2); //交换l1和l2
print_list(l1);
l2.unique();//删除l2中重复的元素
print_list(l2);