文章目录
前言
今天我们终于来到了C++的list章节,在讲解之前,先回顾一下前面的vector和string吧.
vector和string的底层都是用的顺序表,因此其空间在物理结构上连续的.而今天的list却不一样,它在物理上是散乱的.因为list本质上是一个链表!,并且是一个带头双向循环链表,在前面的数据结构章节,还记得博主的链表实现吗?还疑惑博主为什么对于链表的起名很怪吗?因为就是为了今天的list讲解呀~
今天博主也主要将从list的构造使用,迭代器使用,相关容量操作,以及元素访问和数据修改等方面进行阐述
构造的使用
构造函数的使用主要有4个,分别如下
list() | 构造空的list |
---|---|
list (size_type n, const value_type& val = value_type()) | 构造的list中包含n个值为val的元素 |
list (const list& x) | 拷贝构造函数 |
list (InputIterator first, InputIterator last) | 用[first, last)区间中的元素构造list |
1 构造空list
不需要传入任何参数,直接利用list类模板定义对象
list<int> l1; //定义int型链表
list<char> l2; //定义char型链表
list<double> l3; //定义double型链表
//上面的三个对象,内容都空
2 构造含n个值为val的元素
按照上面的定义直接传参即可
list<int> l1(4,5); //定义int型链表,含有4个5
list<char> l2(3,'s'); //定义char型链表,含有3个's'
list<double> l3(4,2.3); //定义double型链表,含有4个2.3
3 拷贝构造
即传入一个同类型的list
list<int> l1(4,5); //定义int型链表,含有4个5
list<int> l2(l1); //把l1的内容复制一份给了l2
4 用迭代区间
**这里有个注意点,迭代区间是左闭右开的!**即不包含右边界.
int num[4] = {
1,2,3,4};
list<char> l1(3,'w');
list<char> l2(l1.begin(),l1.end()); //end()是最后一个元素位置的下一个元素位置,所以不包括,因此l2的内容是 'w' 'w' 'w'
list&l