条款1:仔细选择你的容器

来源:互联网 发布:淘宝盗图申诉100成功 编辑:程序博客网 时间:2024/06/01 23:22

      vector, dequelist中进行选择的指导:vector, list  deque 为程序员提供不同的复杂度平衡,应权衡使用。vector 是序列式容器,作为缺省使用。List应当用于频繁在序列中部进行插入和删除操作的情况。当大多数插入和删除操作发生在序列的头和尾时请选择deque

     连续内存容器(contiguous-memory containers)(也叫做基于数组的容器(array-based containers))在一个或多个连续的内存块(动态分配的)存贮它们的元素,任一内存块容纳多于一个的容器元素。如果一个新元素被插入(inserted)或一个存在的元素被擦除(erased),在同一内存块中其它元素必须搬移为新元素提供空间或回收已擦除元素所占用的空间。这种移动会影响性能(见条款514)和异常安全(不久我们就会看到)。标准的连续内存容器(contiguous-memory containers)是vectorstringdeque。非标准的rope也是一种连续内存容器(contiguous-memory containers)。

 

    基于节点的容器(node-based containers在每一个内存块(动态分配的)内只存贮一个单独元素。插入和擦除(erasure)只影响指向节点的指针,不影响节点本身的内容,所以执行插入或擦除操作时元素值不需要移动(意思是不需要移动内存块)。表示链表的容器如listslist,以及所有的关联式容器都是基于节点(node-based)的。(它们一般都用平衡树实现。)非标准的散列容器(hashed containers)使用各种基于节点(node-based)的实现,请见条款25


      什么是“散列容器”?

原创粉丝点击