list的使用

来源:互联网 发布:log4j2 java web 编辑:程序博客网 时间:2024/05/30 02:22

List是将元素按顺序存储在链表中,与vector的使用很类似,但是它比vector能更为方便的插入和删除。但是随机访问时比较慢的。

文件包含

#include<list>using namespace std;

注意:list它是双向链表
list操作
一:初始化

list <int> l1;//对象l1的size=0list <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的开始位置插入100l1.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);//会清空l2print_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);