• STL学习笔记2--list


    List --- 双向列表

      List是线性列表结构,数据查找需要一个接一个,不能直接得到元素地址,检索时间与目标元素的位置成正比。但是插入数据比较快,可以在任何位置插入数据或者删除数据。list特点是:

      (1) 不使用连续的内存空间这样可以随意地进行动态操作; 

      (2)可以在内部任何位置快速地插入或删除,当然也可以在两端进行push和pop  。 

      (3) 不能进行内部的随机访问,即不支持[ ]  操作符和vector.at()  ; 

    大多数函数和vector的类似,这里就不解释了,有几个不一样的如下:

      merge()  合并两个list  --- 链接之后会把第二个链表删除掉

        void merge( list &lst );//把自己和lst链表连接在一起
        void merge( list &lst, Comp compfunction ); //指定compfunction,则将指定函数作为比较的依据。

     1     list <int> listTest;
     2     list <int>::iterator it;
     3     list <int> listTest2;
     4 //    listTest.assign(4,66);//初始化,给4个元素赋值为66
     5     for (int i=0;i<10;i++)
     6     {
     7         listTest.push_back(i);//
     8         listTest2.push_back(10+i);//
     9     }
    10 
    11     listTest.merge(listTest2);
    12     cout<<listTest.back()<<endl;//获取最后一个元素
    13     //cout<<listTest2.back()<<endl;
    14     if (listTest2.empty())
    15     {
    16         cout<<"listTest2 is ampty"<<endl;
    17     }

      void remove( const TYPE &val )//删除链表中所有值为val的元素

        void remove( const TYPE &val ); //删除链表中所有值为val的元素

    1     listTest.remove(19);//移除最后一个元素
    2      cout<<listTest.back()<<endl;//获取最后一个元素

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

        void unique();//删除链表中所有重复的元素
        void unique( BinPred pr );// 指定pr,则使用pr来判定是否删除。

    1     it = listTest.end();
    2     cout<<listTest.size()<<endl;
    3     cout<<listTest.back()<<endl;//获取最后一个元素
    4     listTest.insert(it,9);//插入到it以前
    5     listTest.insert(it,9);//插入到it以前
    6     listTest.unique();//删除所有重复元素
    7     cout<<"*******************"<<endl;
    8     cout<<listTest.size()<<endl;
    9     cout<<listTest.back()<<endl;//获取最后一个元素

      splice()  合并两个list   

        void splice( iterator pos, list &lst );//把lst连接到pos的位置
        void splice( iterator pos, list &lst, iterator del );//插入lst中del所指元素到现链表的pos上
        void splice( iterator pos, list &lst, iterator start, iterator end );//用start和end指定范围。

    1     it = listTest.end();
    2     listTest.splice(it,listTest2);//将链表2链接到1后面
    3     cout<<listTest.back();

       完整代码如下:

     1 #include "list"
     2 #include "iostream"
     3 using namespace std;
     4 int main()
     5 {
     6     list <int> listTest;
     7     list <int>::iterator it;
     8     list <int> listTest2;
     9 //    listTest.assign(4,66);//初始化,给4个元素赋值为66
    10     for (int i=0;i<10;i++)
    11     {
    12         listTest.push_back(i);
    13         listTest2.push_back(10+i);
    14     }
    15 
    16 //     listTest.merge(listTest2);
    17 //     cout<<listTest.back()<<endl;//获取最后一个元素
    18 //     //cout<<listTest2.back()<<endl;
    19 //     if (listTest2.empty())
    20 //     {
    21 //         cout<<"listTest2 is ampty"<<endl;
    22 //     }
    23 //      listTest.remove(19);//移除最后一个元素
    24 //      cout<<listTest.back()<<endl;//获取最后一个元素
    25 // 
    26     it = listTest.end();
    27     cout<<listTest.size()<<endl;
    28     cout<<listTest.back()<<endl;//获取最后一个元素
    29     listTest.insert(it,9);
    30     listTest.insert(it,9);
    31     listTest.unique();//删除所有重复元素
    32     cout<<"*******************"<<endl;
    33     cout<<listTest.size()<<endl;
    34     cout<<listTest.back()<<endl;//获取最后一个元素
    35     cout<<listTest.front()<<endl;//获取最后一个元素
    36     if (listTest.empty())
    37     {
    38         cout<<"listTest is empty"<<endl;
    39     }
    40 
    41 //     it = listTest.end();
    42 //     listTest.splice(it,listTest2);//将链表2链接到1后面
    43 //     cout<<listTest.back();
    44     getchar();
    45     getchar();
    46     return 0;
    47 }
    Code
  • 相关阅读:
    C# IL语法
    设计模式学习笔记(1)之单例模式
    设计模式学习笔记(3)之策略设计模式(Strategy)
    ORACLE与SQL SERVER语法区别
    浅谈测试驱动开发(TDD)
    面向对象的5条基本设计原则
    干法读后感磨练灵魂 提升心志
    Linux系统管理之硬盘管理
    Linux硬件信息采集
    Linux iptables
  • 原文地址:https://www.cnblogs.com/songliquan/p/3308677.html
Copyright © 2020-2023  润新知