List详解
一、pop_back(),pop_front(),push_back(val),push_front(val),back(),front(),clear(),empty(),size()
pop_back() 删除链表的最后一个元素
pop_front() 删除链表的第一个元素
push_back(val) 将 val 连接到链表的最后
push_front(val) 将 val 连接到链表的头部
back() 返回对最后一个元素的引用
front() 返回对第一个元素的引用
clear() 清空链表
empty() 如果链表为空返回 true
size() 返回 list 中元素的个数
#include<iostream>
#include<list>
using namespace std;
int main(){
list<int> mylist;
for(int i=1;i<=10;i++)
mylist.push_back(i);
cout<<"size:"<<mylist.size()<<" front:"<<mylist.front()<<" back:"<<mylist.back()<<endl;
for(int i=1;i<=10;i++)
mylist.push_front(i+10);
cout<<"size:"<<mylist.size()<<" front:"<<mylist.front()<<" back:"<<mylist.back()<<endl;
mylist.pop_back();
cout<<"size:"<<mylist.size()<<" front:"<<mylist.front()<<" back:"<<mylist.back()<<endl;
mylist.pop_front();
cout<<"size:"<<mylist.size()<<" front:"<<mylist.front()<<" back:"<<mylist.back()<<endl;
mylist.clear();
if(mylist.empty())
cout<<"clear!"<<endl;
return 0;
}
代码运行如下:
二、begin(),end()r,begin(),rend()
begin() 返回指向第一个元素额迭代器
end() 返回指向链表末尾的迭代器
rbegin() 返回一个逆向迭代器,指向链表的末尾
rend() 返回个指向开头之前的逆向迭代器
#include<iostream>
#include<list>
using namespace std;
int main(){
list<int> mylist;
list<int>::iterator it;
list<int>::reverse_iterator its;
for(int i=1;i<=10;i++)
mylist.push_back(i);
cout<<"mylist:";
for(it=mylist.begin();it!=mylist.end();it++)
cout<<' '<<*it;
cout<<endl;
cout<<"mylist backwards:";
for(its=mylist.rbegin();its!=mylist.rend();its++)
cout<<' '<<*its;
cout<<endl;
return 0;
}
代码运行如下:
三、remove(),unique(),reverse()
remove(val) 删除表中所有值为 val 的元素
size() 返回 list 中元素的个数
unique() 去除表中重复元素(离散化) //也就是需要排序后去重
reverse() 将链表元素倒转
#include<iostream>
#include<list>
using namespace std;
int main(){
list<int> mylist;
list<int>::iterator it;
for(int i=1;i<=10;i++)
mylist.push_back(i);
mylist.push_back(1);
cout<<"first:";
for(it=mylist.begin();it!=mylist.end();it++)
cout<<' '<<*it;
cout<<endl;
mylist.remove(1);
cout<<"second:";
for(it=mylist.begin();it!=mylist.end();it++)
cout<<' '<<*it;
cout<<endl;
mylist.push_front(2);
cout<<"3rd";
for(it=mylist.begin();it!=mylist.end();it++)
cout<<' '<<*it;
cout<<endl;
mylist.unique();
cout<<"4th";
for(it=mylist.begin();it!=mylist.end();it++)
cout<<' '<<*it;
cout<<endl;
mylist.reverse();
cout<<"5th";
for(it=mylist.begin();it!=mylist.end();it++)
cout<<' '<<*it;
cout<<endl;
return 0;
}
代码运行如下:
四、erase()
L.erase(pos) 删除 pos 所指元素,并返回下一元素 迭代器
L.erase(start,end) 删除[start,end]间的元素,并返回 下一元素的迭代器
//pos、start、end 均为 iterator
#include<iostream>
#include<list>
using namespace std;
int main(){
list<int> mylist;
list<int>::iterator it1,it2,it3;
for(int i=1;i<=10;i++)
mylist.push_back(i);
cout<<"first:";
for(it3=mylist.begin();it3!=mylist.end();it3++)
cout<<' '<<*it3;
cout<<endl;
it1=it2=mylist.begin();
advance(it2,6);
++it1;
it1=mylist.erase(it1);
cout<<"second:";
for(it3=mylist.begin();it3!=mylist.end();it3++)
cout<<' '<<*it3;
cout<<endl;
it2=mylist.erase(it2);
cout<<"3rd:";
for(it3=mylist.begin();it3!=mylist.end();it3++)
cout<<' '<<*it3;
cout<<endl;
++it1;
--it2;
mylist.erase(it1,it2);
cout<<"4th:";
for(it3=mylist.begin();it3!=mylist.end();it3++)
cout<<' '<<*it3;
cout<<endl;
return 0;
}
代码运行如下:
五、insert(),sort()
L.insert(pos,val) 插入 val 在 pos 位置,并返回其迭代 器
L.insert(pos,n,val) 插入 n 个 val 在 pos 位置
//pos 为 iterator
L.sort()/L.sort(cmp) nlog2n 由小到大排序,可自定义比较函数
#include<iostream>
#include<list>
#include<vector>
using namespace std;
int main(){
list<int> mylist;
list<int>::iterator it,it1;
vector<int> myvector(2,30);
for(int i=1;i<=10;i++)
mylist.push_back(i);
cout<<"first:";
for(it1=mylist.begin();it1!=mylist.end();it1++)
cout<<' '<<*it1;
cout<<endl;
it=mylist.begin();
++it;
mylist.insert(it,11);
cout<<"second:";
for(it1=mylist.begin();it1!=mylist.end();it1++)
cout<<' '<<*it1;
cout<<endl;
mylist.insert(it,2,12);
--it;
cout<<"3rd:";
for(it1=mylist.begin();it1!=mylist.end();it1++)
cout<<' '<<*it1;
cout<<endl;
mylist.insert(it,myvector.begin(),myvector.end());
cout<<"4th:";
for(it1=mylist.begin();it1!=mylist.end();it1++)
cout<<' '<<*it1;
cout<<endl;
mylist.sort();
cout<<"5th:";
for(it1=mylist.begin();it1!=mylist.end();it1++)
cout<<' '<<*it1;
cout<<endl;
return 0;
}
代码运行如下: