我是靠谱客的博主 高兴哈密瓜,最近开发中收集的这篇文章主要介绍list介绍和list的迭代器失效一.list使用 二.迭代器失效,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

一.list使用

 1.1 list介绍

 1.2 特点

 1.3 list的使用

1.list构造

 2.list iterator迭代器的使用

 3.list capacity

4.list element access

5.list madifiers修改链表函数

 二.迭代器失效


一.list使用

        1.1 list介绍

        list底层是一个双向链表结构,每一个结点由三个成员变量组成。一个成员变量保存元素值,一个成员变量为一个指针保存上一个结点的地址,一个成员变量也是指针保存下一个结点的地址。

        1.2 特点

  1. list可以在常数时间范围内在任意位置进行插入和删除的序列式容器,因为不需要挪动数据。并且该容器可以前后双向迭代。与其它容器(array,vector,deque)相比,在任意位置插入删除效率更好。
  2. list与forward_list相似,foword_list是单链表,只能朝前迭代。
  3. list和forward_list的最大缺陷是不能随机访问,只能通过已知的位置迭代到访问位置。

 1.3 list的使用

使用list需要包含头文件:#include<list>

1.list构造

list():构造空的list

list(size_type n,const value_type& val=value_type()):构造list中包含n个值为val的元素。

list(const list& x):拷贝构造函数

list(inputiterator first,inputtlterator last):用[first,last)区间中的元素构造list,区间是迭代器区间。

 2.list iterator迭代器的使用

begin():返回第一个元素的迭代器

end():返回最后一个元素下一个位置的迭代器

rbegin():返回第一个元素的reverse_iterator即end()位置,

rend():返回最后一个元素的下一个位置的revers_iterator即begin位置。

 注意:

1.在遍历情况下,只来可以用迭代器遍历就可以用C++11的范围for遍历,范围for最终转化为迭代器。

2.begin与end为正向迭代器,对正向迭代器执行++操作,迭代器向后移动

3.rbegin与rend为反向迭代器,对反向迭代器执行++操作,迭代器向前移动

 3.list capacity

empty:判断list是否为空,是返回true,否则返回false

size:返回有效结点个数

list没有capacity函数。

4.list element access

front:返回list的第一个结点中值的引用

back:返回list最后一个值的引用。

5.list madifiers修改链表函数

push_front:在list首元素前插入值为val的元素

pop_front:删除list第一个元素,不是头节点

push_back:在list尾部插入值为val的元素

pop_back:删除list最后一个元素

insert:在list pos位置插入值为val的元素

erase:删除list pos位置元素

swap:交换两list中的元素。元素是结点指针,即交换两指针变量保存的地址。

clear:清空list的元素,留下头节点。

注意:vector和list的insert和erase的第一个元素类型是迭代器,返回值也是迭代器

        insert返回插入位置,erase返回原删除位置的下一个位置。为了还保持在pos位置

        插入在pos前插入,删除在pos位置删除

 二.迭代器失效

       首先,我们可以将迭代器想象成类似指针一样,实际它是一个类,成员变量的结点指针,成员函数使得它的操作像指针一样。

        list迭代器失效即迭代器所指向的那个结点失效了,即该结点被删除了。因为list的底层结构为带头双向循环链表,并不是一个连续的结构。插入并不会导致迭代器的失效,不会扩容开辟新空间。只有在删除的时候才会失效,并且失效的只是指向被删除结点的迭代器,其它的迭代器并不会收到影响。

        对比vector迭代器,vector底层结构是一个数组,是一段连续的空间。当进行插入需要扩容时,会进行深拷贝,扩容开辟新空间,而迭代器还指向旧空间,就导致迭代器失效了。

为什么list迭代器在删除的时候会失效?

 为什么插入时不会失效?

 注意:迭代器失效不一定会导致程序奔溃,一般时你访问失效的迭代器时描绘导致程序的奔溃。相当于访问了一个野指针。

 

        

最后

以上就是高兴哈密瓜为你收集整理的list介绍和list的迭代器失效一.list使用 二.迭代器失效的全部内容,希望文章能够帮你解决list介绍和list的迭代器失效一.list使用 二.迭代器失效所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部