list-序列式容器
模板类list是一个容器,list 是由双向链表来实现的,每个节点存储1个元素。list支持前后两种移动方向。list和 vector类似,提供了对元素的随机访问。list 的优势在于任何位置执行插入和删除动作都非常迅速,因为改变的仅仅是链接而已。在 list中移动元素要比在vector和 deque中快得多。list模板类是定义于命名空间(namespace) std中的,该类模板的声明形式为:
模板的第2个参数可有可无,适用于指定内存模型
template<class T,class Allocator=allocator<T>> class list;
1.头文件 <list>
2.List的内部结构和 vector不同
①list不支持随机存取。
②在 list 的任何位置执行元素的插入和移除都非常快,可以迅速实现。
插入和删除动作不会影响指向其他元素的指针、引用、迭代器,不会造成失效。
③list不支持随机存取,不提供下标操作符和 at()函数。
④list没有提供容量、空间重新分配等操作函数,每个元素都有自己的内存。
⑤list也提供了特殊成员函数,专门用于移动元素。和同名的算法相比,速度更快。
3.list的定义
解释
①list<A> listname(size, value); 创建初始大小为size,每个元素初始值为value的 list对象
④list<A> listname(size) 创建初始大小为size的 list对象
②list<A> listname(elselist) 用复制构造函数,从现有的list 中创建新的 list对象;
③list<A> listname(first, last) 从其他list对象中复制由迭代器指定范围的多个元素。
⑤list<int> mylist
4.list元素的赋值
push_front()
由于vector在头部插入新元素的效率非常低,所以只在list中存在该函数。
①:push_front() 在容器中的头部插入新元素
②:push_back() 尾插
③:pop_front() 头删
④:pop_back() 尾删
5.list容器容量
size()和 max_size() 返回类型均为size_type型,即 unsigned int类型
size() 返回list对象(容器)中元素的个数;
max_size() 返回list对象最大允许容量,一般是一个非常大的整数。
resize() 重新调整list对象的大小。
6.list模板类包含和迭代器相关的函数: begin(),front(),rbegin(),end(),back(),rend()
7.list容器的成员函数:empty(),assign()
①:empty() 容器为空返回true
②:assgin() 元素重置
1.初始化list容器
list<int>mylist;
mylist.assign(3,1);
//遍历容器: 3 3 3
2.复制list容器中的元素时
void main()
{
list<int>mylist;
for(int i=0;i<5;i++)
mylist.push_back(i);
//遍历mylist容器 0,1,2,3,4
list<int>relist;
//复制mylist容器中的元素
relist.assign(mylist.begin(),mylist.end());
}
//遍历relist容器 0,1,2,3,4
8.交换两个list容器的内容
#include <iostream>
#include <list>
using namespace std;
template <class T>void print(list<T>&mylist)
{
list<int>::iterator Iter;
for(Iter=mylist.begin();Iter!=mylist.end();Iter++)
cout<<*Iter<<" ";
cout<<endl;
}
int main()
{
list<int>mylist;
for(int i = 0; i<5; i++)
mylist.push_front(i);
print(mylist);//遍历mylist 4 3 2 1 0
list<int>relist;
relist.assign(8,8);
print(relist);//遍历relist 8 8 8 8 8 8 8 8
//交换两个容器
swap(mylist,relist);
print(mylist);//遍历relist 8 8 8 8 8 8 8 8
print(relist);//遍历mylist 4 3 2 1 0
}