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
原文地址:https://www.cnblogs.com/songliquan/p/3308677.html