• list 类


    题外:len = sizeof(a)/sizeof(a[0]); 求出数组长度

    1、list是一种以双向链表方式实现的一种顺序容器。list容器中,存放元素的存储单元可以是连续的也可以是不连续的。

    2、list容器的特点是:<1>可以对list中的每一个元素进行插入、删除、查找操作;与deque和vector容器相比,list进行这些操作的效率更高;

                                 <2>由于list中的元素是通过指针链接在一起构成的链表,因此不能通过下标的方式存取元素

                                 <3>在list中访问元素的效率比在vector容器中的效率低

                                  <4>元素之间的指针占用率额外的内存空间

    3、需要包含的命令

    # include<list>

    using namespace std;

    构造类函数

    1、创造一个list容器

    <1>第一个函数的作用是创建一个空的list容器,该容器为空-------------------------list<int> L1

    <2>第二个函数的作用是将n个值为value 的元素存放到当前的list容器中------------list<int> L2(4,100) 4个值为100

    <3>将输入对象中迭代器[first,last)中的元素存放到容器中--------------------------list<int> L3(L2.begin()+1,l2.end())------错误:list<int> L3(L2.begin()+1,l2.end())

                                                                                                                                                                          构造list对象时,不能对迭代器进行加减运算

    <4>用另一个双向链表x初始化list容器-----------------------------------------------list<int> L4(L3)

    2、析构函数~list()在程序结束时由系统自动调用

    3、operator=函数------复制list中的内容

        用例:L2 = L1;

    迭代器函数------begin、end、rbegin、rend

    1、与vector容器一样,list容器也可以将数组地址(指针) 作为参数

    char a[]="Hello World!";

    int len = strlen(a);

    list<char> L(a,a+len);

    2、在使用迭代器存取list中的元素时,循环的结束条件不可以写做如下形式:

        for(it=L.begin();it<L.end();it++)

        而应该写做一下形式;

        for(it=L.begin();it != L.end();it++)

        这是因为list是一个链表,地址不一定是连续的,因此不能用大于或小于来判断循环是否结束

    3、反向迭代器的定义方式

      list<int>::reverse_iterator rit;

    容量类函数-size、max_size、empty、resize------L.resize(元素个数,元素值)

                详情见deque类

    存取类函数--front、back-------因为list容器实质上是一种双向链表,所以不存在operator[]和at

    操作类函数-assign、push_back、push_front、pop_back、pop_front、insert、erase、swap、clear 类似于 deque中的用法

    1、splice函数----将一个list容器中的元素移动到另一个list容器

    x是一个list容器,也可以是当前容器

    <1>第一个函数的作用是将x中的元素移动到list容器的第position个位置上,并将x中的元素删除---L1:1 2 3 4 5;L2:10 20 30;it指向L1的2 ---L1.splice(it,L2)

                                                                                                                                                                                         -L1:1 10 20 30 3 4 5

    <2>第二个函数的作用是将x中迭代器i指向的元素的元素移动到当前list容器的第position个位置---L2.splicce(L2.begin(),L1,it)----将L1中it指向的元素移动到L2的第一个位置,                                                                                                                                                                       并删除 L1中的it指向的元素

    <3>第三个函数的作用是将x中[first,last)之间的元素移动到当前list容器的第position个位置-----L2.splice(it2,L1,L1.begin(),L1.end())---将L1中[first,last)的元素移动到L2

                                                                                                                                                                                 中it2指向的位置,并删除L1中的元素

    2、remove函数-------作用是将当前list容器中值为value的元素移除

         用例:L.remove(65)--------移除值为65的元素

    3、unique函数----作用是删除list容器中重复的元素,其实它并不真正把重复的元素删除,是把重复的元素移到后面去了,然后依然保存到了原数组中,然后 返回去重后最后一个元素的地址,因为unique去除的是相邻的重复元素,所以一般用之前都会要排一下序。

    <1>第一个函数的作用是从控制序列中删除那些 与前一个元素相等 的元素----L.unique();

    <2>第二个函数的作用是从删除满足某种条件的所有元素-------比如L1.unique(mypred);删除与第一个元素不等的元素

    4、merge函数-----作用是将两个list容器中的元素合并

    <1>第一个函数是将链表x合并到当前的list容器中----L1.merge(L2);

    <2>利用模板类判断两个元素的大小并返回结果,使list容器中的元素降序排列-----L1.merge(L2,greater<数据类型>());

    5、sort函数--------作用是对list容器中的元素进行排序

    <1>升序排序-------L.sort()

    <2>降序排列-------L.sort(greater<数据类型>());

    5、reverse函数------将list中的元素逆置(以相反的顺序存放)

    用例:L.reverse()

    # include<iostream>
    # include<list>
    # include<string>
    using namespace std;
    int main()
    {
    string s;
    getline(cin,s);   ////////输入带空格的字符串
    list<char> L;
    list<char>::iterator it;       //////用迭代器存取元素
    for(int i=0; i<s.length() ; i++)
    {
    L.push_back(s[i]);    //////////将字符串一一存入
    }
    L.reverse();
    for(it = L.begin() ; it != L.end() ; it++)
    {
    cout<<*it;///输出list里的内容
    }
    return 0;
    }

  • 相关阅读:
    在Matlab2018b中配置MinGW-w64 C/C++ 编译器
    电脑忽然黑屏
    Linux中drwxr-xr-x.的意思和权限
    tensorflow 和cuda对应关系
    apt-get update 升级错误
    修改模型参数名
    tensor转化为ndarray
    Ubuntu GitLab仓库服务器搭建
    友元
    常函数 常对象
  • 原文地址:https://www.cnblogs.com/wshyj/p/6275603.html
Copyright © 2020-2023  润新知