计算机科学中,容器是指一种类、数据结构[1][2]或者抽象数据类型,其实例为其他对象。换言之,它们以一种遵循特定访问规则的方法来存储对象。容器的大小取决于其包含的对象(或元素)的数目。潜在的不同容器类型的实现可能在空间和时间复杂度上有所差别,这使得在给定应用场景中选择合适的某种实现具有灵活性。

概览

容器可以三种方式看待:

  • 访问:即访问容器中对象的方式。
    • 数组中,访问凭借数组索引完成。
    • 中,访问遵循先入后出(或后入先出)的顺序[3]
    • 队列中,访问遵循先入先出(或后入后出)的顺序[4][5]
    • 并非所有设计中,这些不同的数据结构都是严格意义上的容器。特别地,按ISO C++的定义,C++标准库中的容器是符合容器要求(container requirement)的类型;C++标准库中作为数组的std::array的特化是这样的容器,但作为栈std::stack和作为队列的std::queue不是容器,而是基于其它容器的容器适配器(container adaptor)。后者和容器有很多实际差异,例如自身不提供迭代器
  • 存储:即存储容器中对象的方式。
  • 遍历:即遍历容器中对象的方式。

典型的容器实现如下的方法

  • 创建一个新的空容器(即构造函数)。
  • 向容器中插入对象。
  • 从容器中删除对象。
  • 删除容器中的所有对象(即清空)。
  • 访问容器中的对象。
  • 获取容器中对象的数目(即尺寸)。

并非所有设计遵循以上要求,例如C++标准库的std::array不提供清空,而std::forward_list不提供对象计数。

容器有时结合迭代器实现。

分类

按存储类型

  • 基于值的容器:存储对象的副本。
  • 基于引用 (英语:reference)的容器:存储指针或对象的引用。

单值或关联容器

  • 单值容器:每个对象在容器中被独立存储,并且其被直接或凭借迭代器访问。
  • 关联容器关联数组、映射或者字典是由键值对组成的容器,因此每一个键在给定容器中最多出现一次。如果一个值(对象)被存储在给定容器中,那么键可以用于寻找它。

图形容器

部件工具箱使用特殊控件(也称作容器)去将其他控件分组(窗口面板等)。除它们的图形特性之外,它们有和容器类一致的表现:它们存有它们子控件的列表,并且允许对子控件进行增加、删除或获取等操作。

不同实现

参见

参考资料

外部链接

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.