在 Effective STL 的第1项中,Herb Sutter区分了连续容器和基于节点的容器。向量,字符串和deques是连续的,而链表和关联容器是基于节点的。这对于性能考虑(从开始,中间或结束插入或删除的速度,迭代,大内存分配注意事项等)非常有用。
特别是,我对List<T>
以及如下列表感兴趣:BaseList : CollectionBase, ITypedList
。
我听说List<T>
更像是std::vector<T>
而不是链接列表。这些C#容器都是连续的吗?除LinkedList<T>
之外还有哪些节点容器可用?有可能在MSDN的某个地方进行比较吗?
答案 0 :(得分:2)
本文中有一个表列出了哪些容器是连续的(向下滚动):
摘录:
List是一个基本的连续存储容器。有些人可能称之为矢量或动态数组。基本上,它是一系列项目,一旦超过其当前容量就会增长。由于项目是作为数组连续存储的,因此您可以非常快速地按索引访问List中的项目。但是,在List的开头或中间插入和删除是非常昂贵的,因为您必须分别在删除或插入时向上或向下移动所有项目。但是,在List的末尾添加和删除是一个分摊的常量操作 - O(1)。通常,当您没有任何其他约束时,List是标准的首选集合,通常我们更喜欢List甚至数组,除非我们确定大小将保持绝对固定。
答案 1 :(得分:1)
答案 2 :(得分:0)