作者:几冬雪来
时间:2023年9月28日
内容:C++——list内容讲解
目录
前言:
在上一篇博客中我们讲解了list的新接口,list与vector,string的区别所在。更加进一步的说明了list的迭代器的书写,而在今天我们将借由list迭代器来对list的const迭代器进行详细的讲解与说明。
list的const迭代器:
在学习list的const迭代器之前,我们先来回顾一下list的迭代器。
list,string和vector的迭代器访问的是指针,所以所有的容器都希望提供像指针一样去访问容器的方式。
在string和vector只需要提供原生指针即可。
string和vector使用的原生指针,在这里typedef T*就是iterator,因为普通的指针完美的符合这个行为。
并且string和vector的物理空间是连续的。
因此它的解引用访问的就是该处的数据,进行++就是访问下一个数据。
const的iterator:
那么在这里,const的iterator是什么,它使用的指针和vector,string有什么不同?
相较于二者,const的iterator有所不同。
在const的使用中分为两种,一种是指针不能被修改,另外一种是指向的内容不能被修改。
像上图在*之前的const修饰的都是指向的内容不能被修改,都是它自己是可以被修改的。所以的迭代器都要符合。
string和vector的不同是因为二者的底层结构占了便宜,因为它们的空间是连续的,而list则是不连续的。
const迭代器:
在list中因为空间是不连续的,因此它的指针不能直接使用。这个时候就要借助一个类来封装,来控制它的行为。
那么如果控制它的行为呢?我们可以重载它的operator*和operator++,这样就能控制它这里的行为。
在这里我们就将封装的迭代器类型进行一个typedef来达到我们的目标。
接下来我们进行讲解const迭代器,这里我们要使用的