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 }