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
}

 

posted @ 2022-02-16 10:48  PanDai  阅读(56)  评论(0)    收藏  举报