STL容器之list
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; }
运行结果如下: