• list容器


    双向循环链表list

    list是双向循环链表,每个元素都知道前面一个元素和后面一个元素。

    list和vector的差别:

    1. 在list中,因为其内存分配是非连续的,因此不能像vector那样用[]操作符取值。而仅仅能用迭代器来訪问list中的元素
    2. list中提供的成员函数与vector类似。只是list提供对表首元素的操作: push_front()、pop_front()。这是vector不具备的。


    样例:

    int data[6]={3,5,7,9,2,4};  
    list<int> lidata(data, data+6);  
    lidata.push_back(6);  
    ...

           list初始化时,申请的空间大小为6。存放下了data中的6个元素,当向lidata插入第7个元素“6”时。list申请新的节点单元,插入到list链表中,数据存放结构例如以下图所看到的:

     


         list每次添加一个元素,不存在又一次申请内存的情况,它的成本是恒定的。

    而vector每当添加关键元素的时候,都须要又一次申请新的更大的内存空间,会调用元素的自身的复制构造函数。存在构造成本。在销毁旧内存的时候,会调用析构函数。存在析构成本。所以在存储复杂类型和大量元素的情况下,list比vector更有优势! 

       List是一个双向链表,双链表既能够向前又能够向后链接它的元素。

       List将元素按顺序储存在链表中,与向量(vector)相比, 它同意高速的插入和删除。可是随机訪问却比較慢。

    assign() 给list赋值 

    back() 返回最后一个元素 

    begin() 返回指向第一个元素的迭代器 

    clear() 删除全部元素 

    empty() 假设list是空的则返回true 

    end() 返回末尾的迭代器 

    erase() 删除一个元素 

    front() 返回第一个元素 

    get_allocator() 返回list的配置器 

    insert() 插入一个元素到list中 

    max_size() 返回list能容纳的最大元素数量 

    merge() 合并两个list 

    pop_back() 删除最后一个元素 

    pop_front() 删除第一个元素 

    push_back() 在list的末尾加入一个元素 

    push_front() 在list的头部加入一个元素 

    rbegin() 返回指向第一个元素的逆向迭代器 

    remove() 从list删除元素 

    remove_if() 按指定条件删除元素 

    rend() 指向list末尾的逆向迭代器 

    resize() 改变list的大小 

    reverse() 把list的元素倒转 

    size() 返回list中的元素个数 

    sort() 给list排序 

    splice() 合并两个list 

    swap() 交换两个list 

    unique() 删除list中反复的元素

  • 相关阅读:
    阶段3 3.SpringMVC·_03.SpringMVC常用注解_1 RequestParam注解
    阶段3 3.SpringMVC·_02.参数绑定及自定义类型转换_7 获取Servlet原生的API
    函数传参
    利用 操作符特性 代替if判断语句
    for(;;)和 while(1) 有什么区别吗?for()和while()的使用情景。
    一个简单的mfc单页界面文件读写程序(MFC 程序入口和执行流程)
    ARM异常---一个DataAbort的触发过程:
    C语言,单链表操作(增删改查)(version 0.1)
    Cpu实验
    H-JATG:NAND_FLASH的参数设置
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5167317.html
Copyright © 2020-2023  润新知