List是一个双向链表,因此它的内存空间可以不连续,通过指针进行数据访问。 List的随机访问效率比较低,因此list没有提供[ ]运算符的重载。 List可以很好的支持任意地方的插入和删除操作,只需要移动指针即可。 列表定义在<list>头文件中。
列表类成员函数
//----迭代器iterators----
iterator begin(); //迭代器指向第一个元素
iterator end(); //迭代器指向最后一个元素后面的位置
reverse_iterator rbegin(); //迭代器指向最后一个元素
reverse_iterator rend(); //迭代器指向第一个元素前面的位置
//----容量capacity----
bool empty(); //测试是否为空表
size_type size(); //返回列表长度
size_type max_size(); //返回列表能容纳的最大长度
void resize(size_type sz, T c=T()); //重置列表长度为sz,c填充到扩充元素中
//----元素存取element access----
front(); //返回表头元素
back(); //返回表尾元素
//----列表调节器modifiers----
void assign(size_type n, const T& u); //列表赋n个均为u的值
void push_front(const T& x); //插入一个元素到表头
void pop_front(); //删除表头元素
void push_back(const T& x); //增加一个元素到表尾
void pop_back(); //删除表尾元素
//在列表pos处插入n个元素值x,pos从 1 起
void insert(iterator pos, size_type n, const T& x);
iterator erase(iterator pos); //删除列表指定位置的元素,pos从 1 起
void swap(list<T, Allocator>& lst); //与列表lst互换元素
void clear(); //清空列表
//----列表运算operations----
void remove(const T& value); //删除列表中值与value相同的所有元素
void remove_if(Predicate pred); //删除列表满足条件的元素
void unique(); //删除列表重复值
void merge(list<T, Allocator>& x); //合并列表x,列表必须有序才可以合并
void sort(); //列表排序
void sort(Compare comp); //列表按comp关系比较排序
void reverse(); //列表逆序,注意仅仅是逆序,不是逆序排列
列表应用简单实例
通过成员函数可以看到,list就是一个双向的链表。 基本功能就包括生成结点、插入结点、删除结点、查找结点等。
list<char> newlist;
newlist.push_back('a');
newlist.push_back('c');
// Use iterator to find character.
list<char>::iterator Findstr;
Findstr = find(newlist.begin(), newlist.end(), 'c');
// It means no find. end refer to the next to the last element in the last.
if (Findstr == newlist.end()) cout << "No find.";
else cout << " " << * Findstr;