【问题标题】:Are c-style arrays considered containers?c 风格的数组是否被视为容器?
【发布时间】:2018-05-09 07:30:10
【问题描述】:

C 风格的数组,例如int holder[10] 是否被视为容器?我问的原因是,如果它们出现在逻辑上是有道理的,但它们没有出现在这个list of containers

【问题讨论】:

  • 定义容器
  • 该链接指向容器 library - 它是 C++ 标准库的一部分
  • 它们被实现为类模板,所以普通数组不是那种意义上的容器。
  • @ChristianHackl 为什么这是一个语言律师问题?
  • @PasserBy:因为它显然只是关于正确的术语。

标签: c++ language-lawyer


【解决方案1】:

不,它们不是容器,因为在 ISO C++ 标准中,“容器”一词仅正式用于标准库中的容器类。相反,关于数组的整个部分并没有使用“容器”这个词。请参阅latest C++17 draft 中的 §11.3.4。

您可以将数组称为“复合类型”、“对象序列”或“聚合”,但不能称为“容器”。

【讨论】:

    【解决方案2】:

    它们不是严格意义上的容器。

    C++ std::array 是一个容器,它添加了一些原生数组所缺少的东西(比如能够按值传递和返回数组)。

    【讨论】:

    • 容器是什么意思?
    【解决方案3】:

    不,根据您提供的链接下的描述,它们不是。阅读您自己提供的链接,第一句话:

    容器是一个持有者对象,它存储了其他的集合 对象(其元素)。它们被实现为类模板,其中 允许作为元素支持的类型具有很大的灵活性。

    容器管理其元素的存储空间并提供 成员函数以直接或通过迭代器访问它们 (与指针具有相似属性的引用对象)。

    容器复制编程中非常常用的结构: 动态数组(向量)、队列(queue)、栈(stack)、堆 (priority_queue)、链表(list)、树(set)、关联数组 (地图)...

    【讨论】:

    • 我当然有。令人困惑的是,如果 c 风格的数组也被称为容器,那就太合乎逻辑了,因为容器是包含其他对象的对象。
    • 您正试图以某种方式在这里强加您自己的术语。例如,描述清楚地说明了manages storages space(即分配器)和provides member functions to access them。而已。这不是你希望它应该/可能的样子。这是您发送的链接中正式描述的内容;至少对于大多数人来说。话虽如此,SO 不是讨论网站。
    • @step:将数组视为定义多个不同变量的编译器辅助快捷方式可能会更好。 int arr[3];int x1; int x2; int x3; 的相似之处远胜于容器。
    猜你喜欢
    • 1970-01-01
    • 2016-02-20
    • 2020-08-14
    • 2013-05-07
    • 1970-01-01
    • 2023-03-16
    • 2010-09-16
    • 2011-04-05
    相关资源
    最近更新 更多