已经广泛存在的类似载体的容器有哪些变体?我必须写我自己的书吗? [英] What variations of vector-like containers already widely established? Do I have to write my own?

查看:0
本文介绍了已经广泛存在的类似载体的容器有哪些变体?我必须写我自己的书吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的程序中,我经常需要拥有一个像数组一样的容器--即用于连续存储在内存中的数据,但向量太灵活了,没有它应有的实用或效率。

需求与std::vector在一个或多个方面不同,例如:

  • 只能在结尾处插入元素,不能移动其他元素
  • 构建/编译后不能更改容量
  • 构造/编译后不能更改大小
  • 存储是类固有的,不涉及分配器
  • 对于单个类型没有奇怪的特殊大小写,如std::vector<bool>
  • 引用和/或迭代器在插入时不会失效

如有必要,我将自己实现这样一个容器,但它很可能已经存在于标准库或Boost等流行的库中。

问题是,它可能很难找到,也许它有一个你意想不到的奇特名字。那么,上述参数空间中存在哪些类向量的容器呢?

即使现有容器不能满足我的要求,引用列表也会有所帮助:如果我最终实现了一个新容器,我可以采用适当的名称并避免混淆名称。

推荐答案

以下是我所知道的:

还有";可变长度数组和";数组,它们存在于C++中;前者存在于C中。另请参阅this questionthis answer有关这些非C++容器的信息。

让我们比较一下所有这些组件的功能。如果您需要的容器与下面的某一行不完全匹配,则需要实现您自己的容器并为其选择一个名称。

标准 C数组 数组 向量 UNIQUE_PTR valarray 达纳雷 静态向量 小向量 稳定向量
来源/库 语言 标准 标准 标准 标准 丢弃标准 Boost Boost Boost
类型参数 T,N T,N T、A T T T T、C、O T、N、A、O T、A
定容时间 编译 编译 从不 (构造) 从不 构造 编译 从不 从不
大小固定时间 编译 编译 从不 不适用 从不 从不 构造 从不 从不
大小=容量始终? 不适用
存储通常启用 堆栈 堆栈 堆栈 堆栈/堆
稳定迭代器? 不适用 不适用 不适用 不适用 不适用 (✔)
元素类型限制

模板参数图例:

  • A表示分配器
  • 元素类型为T
  • N表示元素数量中的大小
  • C表示元素数量中的容量
  • O表示选项

最后,一个有趣但不太受欢迎的类似向量的容器是"veque",即双列向量汞合金。

这篇关于已经广泛存在的类似载体的容器有哪些变体?我必须写我自己的书吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆