//list容器链表
//节点,数据域,指针域
//对任意位置快速插入和删除
//遍历元素没有vector快
//占用内存空间更大
//双向循环链表,prev指向下一个结点
#include<iostream>
#include<list>
#include<algorithm>
using namespace std;
void printlist(const list<int>&L){
for(list<int>::const_iterator it=L.begin();it!=L.end();it++){
cout<<*it<<" ";
}
cout<<endl;
return ;
}
void print(int a){
cout<<a<<" ";
}
void STLprintlist(const list<int>&L){
for_each(L.begin(),L.end(),print);
}
void print1(const list<char>&L){
for(list<char>::const_iterator it=L.begin();it!=L.end();it++)
cout<<*it<<" ";
cout<<endl;
}
int main(){
//构造函数
list<int> L1;
for(int i=0;i<3;i++)
L1.push_back(10*(i+1));
list<int> L2(5,10);
list<int> L3(L2);
list<int> L4(L2.begin(),L2.end());
printlist(L1);
STLprintlist(L2);cout<<endl;
printlist(L3);
STLprintlist(L4); cout<<endl;
//赋值和交换
list<char> H3,H2,H1(8,'c');
H2=H1;
H3.assign(H1.begin(),H1.end());
H3.assign(5,'d');
//交换
H3.swap(H1);
cout<<"h3为 : ";
print1(H3);
if(H3.empty()==0)
H3.resize(10,'m');//填充为空格
cout<<"h3中元素的个数:"<<H3.size()<<endl;
H3.push_back('e');
H3.pop_back();
H3.push_front('a');
H3.pop_front();
list<char>::iterator p= H3.begin();
for(int i=0;i<3;i++)
p++;
p=H3.insert(p,'e');//前置++先加再用 ,后置++反之
H3.insert(p,6,'r');
H3.insert(p,H1.begin(),H1.end());
H3.remove('r');//删除所有与r一样的元素
H3.erase(p);
// H3.erase(H3.begin(),H3.end()) ;//相当于h3.clear() ;
cout<<"h3中元素的个数:"<<H3.size()<<endl;
print1(H3);
//数据存取
//list不支持at和【】
//迭代器只能前后移动,不支持跳跃访问
cout<<H3.front()<<endl;
cout<<H3.back()<<endl;
return 0;
}