//链表list
#include<iostream>
using namespace std;
#include<list>
#include<algorithm>
/*
**list的定义和初始化
list<int>lst1; //创建空list
list<int>lst2(5); //创建含有5个元素的list
list<int>lst4(lst2); //使用lst2初始化lst4
list<int>lst5(lst2.begin(),lst2.end()); //同lst4
lst(first,last) //声明一个列表,其元素的初始值来源于由区间所指定的序列中的元素
push_back():从list的末端插入
push_front():从list的头部插入。
empty():判断list是否为空
resize():如果调用resize(n)将list的长度改为只容纳n个元素,
超出的元素将被删除,如果需要扩展那么调用默认构造函数T()将元素加到list末端。
如果调用resize(n,val),则扩展元素要调用构造函数T(val)函数进行元素构造,其余部分相同。
clear():清空list中所有的元素
front():获得list容器中的头部元素
back():获得list容器的最后一个元素
pop_back():删除最后一个元素
pop_front():通过pop_front()删除第一个元素;序列必须不为空
assign():第一种情况是:l1.assign(n,val)将 l1中元素变为n个T(val)。
第二种情况是:l1.assign(l2.begin(),l2.end())将l2中的从l2.begin()到l2.end()之间的数值赋值给l1。
swap():交换两个链表(两个重载),一个是l1.swap(l2); 另外一个是swap(l1,l2),都可能完成连个链表的交换。
reverse():完成list的逆置
merge():合并两个链表并使之默认升序。
l1.merge(l2,greater<int>()); 调用结束后l2变为空,l1中元素包含原来l1 和 l2中的元素
insert():在指定位置插入一个或多个元素
l1.insert(l1.begin(),100); 在l1的开始位置插入100。
l1.insert(l1.begin(),2,100); 在l1的开始位置插入2个100。
l1.insert(l1.begin(),l2.begin(),l2.end());在l1的开始位置插入l2的从开始到结束的所有位置的元素。
erase():删除一个元素或一个区域的元素
l1.erase(l1.begin()); 将l1的第一个元素删除。
l1.erase(l1.begin(),l1.end()); 将l1的从begin()到end()之间的元素删除。
*/
#include<iostream>
using namespace std;
#include<list>
void display(list<int>l)//输出链表
{
list<int>::iterator iter;
for(iter=l.begin();iter!=l.end();iter++)
{
cout<<*iter<<" ";
}
cout<<endl;
}
int main()
{
list<int>l1;
list<int>l2;
list<int>l3;
list<int>::iterator iter;
int i;
for(i=0;i<10;i++)//从尾部插入元素到l1
{
l1.push_back(i);
}
for( i=0;i<10;i++)//从头部插入元素到l2
{
l2.push_front(i);
}
for( i=0;i<10;i++)//从头部插入元素到l3
{
l3.push_front(i);
}
cout<<"链表l1:";
display(l1);
cout<<"链表l2:";
display(l2);
cout<<"改变l1的长度:";
l1.resize(3);//改变链表的长度
display(l1);
l2.clear();//清空所有元素
display(l2);
cout<<"l1首元素:"<<l1.front()<<endl;//获得头部元素
cout<<"l1尾元素:"<<l1.back()<<endl;//获得尾部元素
cout<<"删除l1中的最后一个元素:"<<endl;
l1.pop_back();//删除最后一个元素
display(l1);
cout<<"删除l1中的第一个元素:"<<endl;
l1.pop_front();//删除第一个元素
display(l1);
cout<<"交换链表l1和l3:";
swap(l1,l3);
cout<<endl;
cout<<"l1:";
display(l1);
cout<<"l3:";
display(l3);
cout<<"逆置l1后:";
l1.reverse();//逆置
display(l1);
cout<<"合并l1和l3后:";
l1.merge(l3,greater<int>());
display(l1);
cout<<"在l3开始位置插入5:";
l3.insert(l3.begin(),5);
display(l3);
cout<<"在l3开始位置插入10个5:";
l3.insert(l3.begin(),10,5);
display(l3);
cout<<"将l1从begin到end之间的元素删除:";
l1.erase(l1.begin(),l1.end());
if(l1.empty())
cout<<"l1空!"<<endl;
return 0;
}
标准模板库----list
最新推荐文章于 2024-08-08 10:56:51 发布