list的使用

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);

猜你喜欢

转载自blog.csdn.net/prefect_boy/article/details/77856173