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

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

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

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

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

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

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

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

原文地址:https://www.cnblogs.com/liangjf/p/10124046.html

时间: 2024-08-28 23:26:25

条目1《慎重选择容器类型》的相关文章

Effective STL 第1条:慎重选择容器类型

C++提供了几种不同的容器供我们选择,这里简单回顾一下: 1.标准STL序列容器:vector.string.deque和list. 2.标准STL关联容器:set.multiset.map.和multimap. 3.非标准序列容器slist和rope.slist是一个单向链表,rope本质上是一"重型"string. 4.非标准关联容器hash_set.hash_multiset.hash_map和hash_multimap. 5.vector<char>作为string

条目九《慎重选择删除元素的方法》

慎重选择删除元素的方法 不同容器删除元素的方法是有区别的. 对于删除容器里的一个元素 序列容器( string, vector, deque)最高效的方法是erase-remove. list最高效的方法是remove. 关联容器没有remove成员函数,只有erase,直接用erase函数来删除元素. 若删除容器里符合一个判别式的元素: 序列容器( string, vector, deque)最高效的方法是erase-remove_if. list最高效的方法是remove_if. 关联容器的

简明python教程 --C++程序员的视角(四):容器类型(字符串、元组、列表、字典)和参考

数据结构简介 Python定义的类型(或对象)层次结构在概念上可以划分为四种类别:简单类型.容器类型.代码类型 和内部类型. 可以将 PyObject 类之下的所有 Python 类划分为 Python 运行时解释器可以使用的四个主要类别: 简单类型 —— 基本构建块,如 int 和 float. 容器类型—— 保存其他对象. 代码类型—— 封装 Python 程序的元素. 内部类型 —— 程序执行期间使用的类型. 内置的简单类型 Python 有五个内置的简单类型:bool.int.long.

STL中慎重选择删除元素的方法

 一.要删除容器中有特定值的所有对象 1.如果容器是vector.string或deque,则使用erase-remove习惯用法.例如: vector<int> c; c.erase(remove(c.begin(),c.end(),1963),c.end());//删除值是1963的元素 下面讲一下算法remove: template<classForwardIterator,class T> ForwardIteratorremove(ForwardIterator fi

set,multiset容器类型

set和multiset会根据特定的排序准则,自动将元素排序.两者不同处在于multiset允许元素重复而set不允许. 一.集和多集(set 和multiset 容器类) 在使用set和multiset之前,先必须包含头文件<set>#include < set>在其中,set和multiset被定义为命名空间std内的class template: 1 namespace std { 2 template<class T, 3 <class Compare = le

如何选择容器,主要从存放要求和读写数据效率两方面考虑

1 ,存放要求 无序:set,不能重复. 有序:List,允许重复 “key-value”对:Map 2 ,读写效率 Hash:两者都最高 Array:读快改慢 Linked:读慢改快 Tree:加入元素可排序使用 如何选择容器,主要从存放要求和读写数据效率两方面考虑,布布扣,bubuko.com

10_css选择符类型1.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

11_css选择符类型2.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

NANDflash和NORflash的区别(设计师在使用闪存时需要慎重选择)

NANDflash和NORflash的区别(设计师在使用闪存时需要慎重选择) NOR和NAND是现在市场上两种主要的非易失闪存技术.Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面.紧接着,1989年,东芝公司发表了NAND flash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级.但是经过了十多年之后,仍然有相当多的硬件工程师分不清NOR和NAND闪存. 相"flash存储器"经常可以与相&qu