【问题标题】:C++ How can I make an Array double its size, without using a vector or a dynamic array? [closed]C++ 如何在不使用向量或动态数组的情况下使数组的大小翻倍? [关闭]
【发布时间】:2021-02-21 02:25:45
【问题描述】:

我有一个作业,我应该参加 3 节课。第一类管理第二类,第二类管理第三类。但是,在第二个类内部应该是一个数组,用于存储第三个类的所有对象。该数组应该在需要时将其大小加倍(如向量),但我不允许使用向量或动态数组(新)。我不知道该怎么做。有人可以帮忙吗?

【问题讨论】:

  • 不可能。变长数组是动态数组。
  • std::deque怎么样?
  • 另一种方法是永远不允许需要加倍的大小。
  • 这看起来像The XY Problem。实际的任务是什么,你的想法是什么?
  • 是的,这看起来像是一个 XY 问题。也许你已经决定用这个不可能的“动态数组”来解决这个问题,但实际上,这个问题并不是用数组来解决的。

标签: c++ arrays class


【解决方案1】:

数组的大小在 C++ 中不能改变。它在其整个生命周期中具有相同的大小。因此,无法将数组的大小“加倍”。

您对任务的描述有些不清楚。但在我看来,您的任务是实现一个矢量容器(当然不使用现有的std::vector)。这可以而且确实应该在不使用new[] 的情况下完成。

向量容器的实现方式是使用分配器分配“原始”存储块。如果您不需要支持用户定义的分配器,您可以简单地使用std::allocator。在存储中,您可以使用标准库中的std::uninitialized_XYZ 函数创建动态对象。

要使这个内部“数组”的大小加倍,算法是分配一个新的存储块,然后分配std::uninitialized_move_n 旧存储中的元素到新存储,然后std::destroy_n 被移动的对象,然后释放旧的存储块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 2016-09-28
    • 1970-01-01
    相关资源
    最近更新 更多