list是C++标准模版库(STL,Standard Template Library)中的部分内容。实际上,list容器就是一个双向链表,可以高效地进行插入删除元素,但是随机访问却比较慢。
使用list容器之前必须加上STL的list容器的头文件:
#include<list>;
二、List定义和初始化:
- list<int>lst1; //创建空list
- list<int> lst2(5); //创建含有5个元素的list
- list<int>lst3(3,2); //创建含有3个元素的list
- list<int>lst4(lst2); //使用lst2初始化lst4
- list<int>lst5(lst2.begin(),lst2.end()); //同lst4
三、List常用操作函数:
1.删除头尾元素
c++的stl list 提供pop_back和pop_front()函数来删除第一个和最后一个元素。
pop_back和pop_front()
通过删除最后一个元素,通过pop_front()删除第一个元素;序列必须不为空,如果当list为空的时候调用pop_back()和pop_front()会使程序崩掉。
2.删除所有元素
简单粗暴的方法:调用clear()
List.clear();
3.删除指定位置
std::list 是一个双向链表,对它的遍历大部分都是使用list<T>::iterator it;
删除操作:it =List->erase(it++);
PS:需要返回it,因为it是正在遍历的指针;删除后如果直接返回就无法继续遍历后面的队列了,会报错;
所以使用List->erase(it++)
4.插入元素
insert():在指定位置插入一个或多个元素(三个重载):
l1.insert(l1.begin(),100); 在l1的开始位置插入100。
l1.insert(l1.begin(),2,200); 在l1的开始位置插入2个100。
l1.insert(l1.begin(),l2.begin(),l2.end());在l1的开始位置插入l2的从开始到结束的所有位置的元素。
5.assign()
具体和vector中的操作类似,也是有两种情况,第一种是:l1.assign(n,val)将 l1中元素变为n个T(val)。第二种情况是:l1.assign(l2.begin(),l2.end())将l2中的从l2.begin()到l2.end()之间的数值赋值给l1。
函数总结:
Lst1.assign() 给list赋值
Lst1.back() 返回最后一个元素
Lst1.begin() 返回指向第一个元素的迭代器
Lst1.clear() 删除所有元素
Lst1.empty() 如果list是空的则返回true
Lst1.end() 返回末尾的迭代器
Lst1.erase() 删除一个元素
Lst1.front() 返回第一个元素
Lst1.get_allocator() 返回list的配置器
Lst1.insert() 插入一个元素到list中
Lst1.max_size() 返回list能容纳的最大元素数量
Lst1.merge() 合并两个list
Lst1.pop_back() 删除最后一个元素
Lst1.pop_front() 删除第一个元素
Lst1.push_back() 在list的末尾添加一个元素
Lst1.push_front() 在list的头部添加一个元素
Lst1.rbegin() 返回指向第一个元素的逆向迭代器
Lst1.remove() 从list删除元素
Lst1.remove_if() 按指定条件删除元素
Lst1.rend() 指向list末尾的逆向迭代器
Lst1.resize() 改变list的大小
Lst1.reverse() 把list的元素倒转
Lst1.size() 返回list中的元素个数
Lst1.sort() 给list排序
Lst1.splice() 合并两个list
Lst1.swap() 交换两个list
Lst1.unique() 删除list中重复的元素
四、List使用示例:
示例1:遍历List
//迭代器法
for(list<int>::const_iteratoriter = lst1.begin();iter != lst1.end();iter++)
{
cout<<*iter;
}