list将元素按顺序储存在链表中. 与向量(vector)相比, 它允许快速的插入和删除,但是随机访问却比较慢.
list提供如下三种构造函数:
list<T> l1;
list<T> l2(l1);
list<T> l3(b, e);b,e是指定范围的两个迭代器
list提供如下的接口函数,具体实现及函数原型请参阅其他帮助文档
assign() 给list赋值
back() 返回最后一个元素
begin() 返回指向第一个元素的迭代器
clear() 删除所有元素
empty() 如果list是空的则返回true
end() 返回末尾的迭代器
erase() 删除一个元素
front() 返回第一个元素
get_allocator() 返回list的配置器
insert() 插入一个元素到list中
max_size() 返回list能容纳的最大元素数量
merge() 合并两个list
pop_back() 删除最后一个元素
pop_front() 删除第一个元素
push_back() 在list的末尾添加一个元素
push_front() 在list的头部添加一个元素
rbegin() 返回指向第一个元素的逆向迭代器
remove() 从list删除元素
remove_if() 按指定条件删除元素
rend() 指向list末尾的逆向迭代器
resize() 改变list的大小
reverse() 把list的元素倒转
size() 返回list中的元素个数
sort() 给list排序
splice() 合并两个list
swap() 交换两个list
unique() 删除list中重复的元素
下面列出一些函数的使用范例,代码如下:
#include <iostream>
#include <list>
#include <string>
using namespace std;
template <typename T>
void show(list<T>& lst)
{
for(list<string>::iterator it = lst.begin(); it != lst.end(); ++it)
cout << *it << ' ';
cout << endl << endl;
}
int main()
{
list<string> lst1;
//用assign()函数插入一个字符串
lst1.assign(1, "Ronnie O'sullivan");
cout << *lst1.begin() << endl;
//用pushf_back()函数出入一个元素
lst1.push_back("John Higgins");
cout << *++lst1.begin() << endl;
//用pushf_front()函数出入一个元素
lst1.push_front("Mark Willimas");
cout << *lst1.begin() << endl << endl;
show(lst1);
//反转list
lst1.reverse();
show(lst1);
//元素个数
cout << "list size: " << lst1.size() << endl;
list<string> lst2;
lst2.push_back("Mark Selby");
lst2.push_back("Mark Alen");
//return back
cout << "back: " << lst1.back() << endl;
//return front
cout << "front: " << lst1.front() << endl << endl;
//resize list
lst1.resize(6);
cout << "after resize, lst1 size: " << lst1.size() << endl << endl;
//swap
cout << "befor swap:" << endl;
cout << "lst1:" << endl;
show(lst1);
cout << "lst2:" << endl;
show(lst2);
lst1.swap(lst2);
cout << "after swap: " << endl;
cout << "lst1:" << endl;
show(lst1);
cout << "lst2:" << endl;
show(lst2);
//合并两个list,合并之后是排好序的
cout << "after merge:" << endl;
lst1.merge(lst2);
show(lst1);
//clear list
lst1.clear();
cout << "after clear, list size: " << endl;
cout << lst1.size() << endl;
return 0;
}
运行结果如下: