list基本介绍与使用

一:list的介绍

1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭      代。
2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过      指针指向其前一个元素和后一个元素。
3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更      简单高效。
4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执      行效率更好。
5. 与其他序列式容器相比,list和forward_list最大的缺陷是不支持任意位置的随机访问,比如:要      访问list的第6个元素,必须从已知的位置(比如头部或者尾部)迭代到该位置,在这段位置上迭代      需要线性的时间开销;list还需要一些额外的空间,以保存每个节点的相关联信息(对于存储类型      较小元素的大list来说这可能是一个重要的因素)


具体可以看看list文档

list文档

二 :list的基本使用

具体可翻阅list文档

1:list的构造

构造函数(具体可翻阅文档)接口
list (size_type n, const value_type& val = value_type())构造list包含n个value元素
list()构造空list
list(const list& x)拷贝构造函数
list (InputIterator first, InputIterator last)利用迭代区间[fast,last)内的元素构造
list<int> l1;                         // 构造空的l1
list<int> l2(4, 100);                 // l2中放4个值为100的元素
list<int> l3(l2.begin(), l2.end());   // 用l2的[begin(), end())左闭右开的区间构造l3
list<int> l4(l3);                     // 用l3拷贝构造l4

// 以数组为迭代器区间构造l5
int array[] = { 16,2,77,29 };
list<int> l5(array, array + sizeof(array) / sizeof(int));

// 列表格式初始化C++11
list<int> l6{ 1,2,3,4,5 };

2:list迭代器的使用

 

注意: 

1. begin与end为正向迭代器,对迭代器执行++操作,迭代器向后移动
2. rbegin(end)与rend(begin)为反向迭代器,对迭代器执行++操作,迭代器向前移动

                                                                                                                                                   遍历list只能使用迭代器

int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
list<int> l(array, array + sizeof(array) / sizeof(array[0]));

    // 使用正向迭代器正向打印list中的元素
    list<int>::iterator it = l.begin();        // C++98中语法
    //auto it = l.begin();                     // C++11之后推荐写法
    while (it != l.end())
    {
        cout << *it << " ";
        ++it;
    }


    // 使用反向迭代器逆向打印list中的元素
    // list<int>::reverse_iterator rit = l.rbegin();
    auto rit = l.rbegin();
    while (rit != l.rend())
    {
        cout << *rit << " ";
        ++rit;
    }

3:list容量接口

 


list.empty();

int _size = list.size();

4:list元素接口

 

list<int> arr{1,2,3,4,5,6,7,8,9};

int _front = arr.front() //_front == 1;

int _back = arr.back()   //_back == 9

5:list的增删查改

函数声明接口说明
push_front在list首元素前插入一个元素
pop_front删除list首元素
push_back在list尾元素后插入一个元素
pop_back删除list尾元素
insert在list position 位置中插入值为val的元素
erase删除在list position 位置的元素
swap交换两个list中的元素
clear清空list中的有效元素
int array[] = { 1, 2, 3 };
list<int> L(array, array + sizeof(array) / sizeof(array[0]));

// 在list的尾部插入4,头部插入0
L.push_back(4);    //4 1 2 3
L.push_front(0);   //4 1 2 3 0

// 删除list尾部节点和头部节点
L.pop_back();      //4 1 2 3
L.pop_front();     //1 2 3

// 获取链表中第二个节点
auto pos = ++L.begin();
// 在pos前插入2个值为5的元素 
L.insert(pos, 2, 5);  //1 5 5 2 3
auto pos = ++L.begin();
// 在pos前插入1个值为3的元素 
L.insert(pos,3);  //1 3 5 5 2 3

 // 删除pos位置上的元素
L.erase(pos);  
// 删除list中[begin, end)区间中的元素,即删除list中的所有元素
L.erase(L.begin(), L.end());

//交换L与L2中的元素
list<int> L2{1,2,3}
L.swap(L2);  //交换L与L2中的元素

清空L中的元素
L.clear();

list中的迭代器失效

list进行插入操作时迭代器不会失效,但进行删除操作迭代器会失效 

 

 

 

 

 

 

 


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值