list是双向链表的一个泛化容器,支持前向和反向访问list元素等。
创建list对象
为了管理双向链表的元素数据,必须先用list容器的构造函数,创建一个list对象。
1) list()
创建一个没有任何元素的list对象。
下面实例代码为创建空的list对象l。
list<int> l;
2) list(size_type n)
创建一个链接有n个元素的list对象,每个元素采用它的类型下的默认值0.
下面实例代码为创建了一个具有10个元素的list对象l,每个元素的初始值为0。
list<int> l(10);
3) list(size_type n,const T&value)
创建一个链接了n个元素的list对象,这些元素的初始值为value。
下面实例代码为创建了一个具有10个元素的list对象l,每个元素的初始值为9.3。
list<double> l(10,9.3)
初始化赋值
利用list提供的push_back函数,可将元素数据依次插入链表中。push_back函数常用于list容器的初始化。
下面实例代码为将整数1,2,3依次插入list对象的链表中。
list<int> l;
l.push_back(3);
l.push_back(6);
l.push_back(9);
元素的遍历访问
由于链表中的数据需要一个个元素进行遍历,因此,list元素的遍历只是用迭代器的方式进行。
list提供了begin和end函数,分别执行头尾元素的迭代器
1) iterator begin()
2) iterator end()
元素的插入
由于list链表元素的插入不需要对其他元素进行移位拷贝
除了push_back函数在尾部添加元素外,list还提供了在链首插入元素的push_front函数和在任一迭代器位置插入的insert函数。
1) void push_front(const T&)
2) iterator insert(iterator pos,const T&x)
下面实例代码为依次插入6、8和9,然后调用insert函数在元素‘8’前插入‘7’,调用push_front函数在首元素前插入‘5’。
#include<list>
#include<iostream>
using namespace std;
int main()
{
list<int> l;
l.push_back(6);
l.push_back(8);
l.push_back(9);
//插入链表元素
list<int>::iterator i,iend;
i=l.begin();
i++;
l.insert(i,7);
l.push_front(5);
//打印链表元素
iend=l.end();
for(i=l.begin(),i!=iend;i++)
{
count<<*i<<' ';
}
}
打印的结果为5 6 7 8 9
元素的删除
list同样具有高效的链表元素删除处理,包括删除首元素的pop_front函数、删除末尾元素的pop_back函数和删除任一指定迭代器位置处元素的函数
1) void pop_front()
删除list的第一个链表元素
2) void pop_back
删除list的最后一个链表元素
3) iterator erase(iterator pos)
删除pos所指向的链表元素
4) iterator erase(iterator first,iterator last)
删除迭代器区间(first,last)所指向的所有链表元素
5) void clear()
删除所有list链表元素
6) void remove(const T&value)
删除list链表中所有元素值为value的元素
元素的反向遍历
由于list容器的迭代器具有“--”操作,因此也定义了反向迭代器reverse_iterator和const_reverse_iterator,用反向链进行链表元素的遍历。
利用list双向链表容器提供的rbegin和rend函数,可返回反向链的首元素和尾元素的迭代器。
下面实例代码为反向遍历list链表元素,然后输出打印
list<int> l;
list<int>::reverse_iterator ri,riend;
riend=l.rend();
for(ri=l.rbegin();ri!=riend,ri++)
{
cout<<*ri;
}