STL

《Effective STL》

1《慎重选择容器类型》

Posted by Liangjf on April 9, 2019

条目一《慎重选择容器类型》

主要是先抛出选择STL容器时面对的问题,并且从中简单的对各个容器做个分类和使用对比。

在选择stl容器类型的时候,一般需要从以下的角度来考虑选择对象:

  • 1.元素的排序情况
  • 2.是否与标准相符
  • 3.迭代器的能力
  • 4.元素布局与C的兼容性
  • 5.查找速度
  • 6.因引用计数数所引起的反常行为
  • 7.是否便于实现事务语义
  • 8.迭代器在何种条件下变为无效
  • 9.算法复杂度

除了标准和非标准容器分类外,不引起人关注的分类方法有根据容器在内存中的存储方式是否连续来分类。基于连续内存的有string,vector,queue。基于非连续内存存储(内存块)的有list,slist和关联容器(树状结构,一般是平衡树)。

根据内存是否连续的分类有些情况是比较看中的,因为连续内存存储方式,在插入和删除数据时会引起大量的数据搬移工作,而节点存储方式没有这种情况。

STL包含了标准和非标准的容器,在选择的时候需要注意,是要一定要标准的。因为不标准的在移植的时候可能会存在兼容性问题。

在编写多进程和多线程等程序时,并不是所有的STL容器都可以选择的,因为有的容器不是线性安全的,存在数据并发竞争问题。在实际工作中,不应该因为这点而抛弃STL标准库而统一自己造轮子,这是不可取的。而是应该采取慎重考虑,对比选择,选择合适自己的,实在没办法再造轮子!把累活脏活丢给“大牛们”。