C++ 在std库里定义了list类型,和vector不一样的是list字如其名使用的是非连续存贮的链表结构。具体的来说是一个环形的双向链表。这样可以加快插入和删除的速度。但是我在使用的时候遇到了一个有意思的现象。
一开始我并没有看他的具体实现,只是想当然的认为是一个简单的环形。比如有123三个节点我以为是1->2->3->1... 然后使用的时候发现3的next并不是1,调试的时候看到3的next的值居然还是3.后来看了一下实现发现在list里有一个傀儡节点用于标志链表的末尾。也就是list.end(). 也就是说3的下一个是傀儡节点,而傀儡节点的下一个才真的是1。就像下面的图。
