C++ list 双向链表使用的注意点

321 阅读1分钟

C++ 在std库里定义了list类型,和vector不一样的是list字如其名使用的是非连续存贮的链表结构。具体的来说是一个环形的双向链表。这样可以加快插入和删除的速度。但是我在使用的时候遇到了一个有意思的现象。

一开始我并没有看他的具体实现,只是想当然的认为是一个简单的环形。比如有123三个节点我以为是1->2->3->1... 然后使用的时候发现3的next并不是1,调试的时候看到3的next的值居然还是3.后来看了一下实现发现在list里有一个傀儡节点用于标志链表的末尾。也就是list.end(). 也就是说3的下一个是傀儡节点,而傀儡节点的下一个才真的是1。就像下面的图。

![](https://upload-images.jianshu.io/upload_images/23475747-3d2a15a6b6f0c792.png?imageMogr2/auto-orient/strip|imageView2/2/w/781/format/webp)