如果存储指针,std :: list比std :: vector更好吗?

jma*_*erx 3 c++ stl

我通常避免使用std :: list,但是在我存储指针的情况下,使用std :: list会更有利,因为我可以随机插入指针而不必移动所有其他指针吗?这会带来哪些优点和缺点std::vector<Some*>

谢谢

Ste*_*end 9

由于指针的复制构造是微不足道的,因此这里的决定不是关于一个或另一个是否更好地存储指针,而是更好地满足您的需求.

如果你真的需要做很多随机插入(和删除?)然后list可以更好地工作,虽然它不是一个简单的决定 - 也许有一个vector预留空间是可取的,即便如此.你想要一个listjust 的每节点开销来存储指针吗?在32位Windows上,每个条目中有12个字节list,加上堆管理开销,每个条目总共20多个字节.这也无助于数据本地化随着时间的推移.同时,vector每个条目使用4个字节(再次使用32位)并保证将其元素存储在连续的块中.

除非将指针元素包装为某种类型的智能指针,否则你必须以任何方式处理erase/ clear/破坏容器的内存清理.轻松进行内存管理的Some*另一种方法是Boost指针容器之一.

另见这里的一些分析list,vectordeque.就个人而言,我越来越list认为在主流中没有那么有用的观点.

  • @Dialecticus:实际上,`list`只有真正的亮点,因为它是基于节点的容器,这意味着它的迭代器失效的条件都非常稀少,完全不象载体.也就是说,你可以在一个迭代器存储到列表中的一个元素,做任何数量的插入/清除的,只要你没有删除指向你所存储的迭代器,它仍然是有效的元素. (2认同)