0

给定这样一个结构,我如何创建一个可扩展(向量)数组?

struct IntArray {
   int size;
   int capacity;
   int *contents;
};

我正在考虑使用 int *contents 指向一个整数数组,并在 IntArray 扩展时更改指针,但是我如何知道创建初始整数数组的大小?

4

1 回答 1

1

正如@aaronman所说,如果我们只是给你最终的解决方案,那对你没有好处:如果你确实想学习一些东西,你最好自己从头开始尝试(否则只使用现有的std::vectorQVector任何向量) .

因此,我建议您查看一些教程或示例以获得灵感,然后从头开始。即使是简单的谷歌搜索实现动态数组的 c++ 教程也会给出一些像这样的可容忍视频以及一些文本链接。

搞清楚实现细节后,可能要设计数组的接口,需要考虑的点可能如下:

  1. 将其设为 aclass而不是struct默认情况下将字段设为私有(封装
  2. 在构造函数中实现初始分配并在 desctuctor 中实现取消分配(参见@juanchopanza的评论)。复制构造函数和赋值运算符也很好,但恕我直言,此时可以省略(例如,您可以将它们设为私有而不实现以简单地禁止复制)
  3. 将所有功能实现为方法,例如,方法push_back可能会添加到结尾。您会看到添加元素会导致重新分配,因此最好将重新分配过程提取到另一个(可能是私有的)方法中(以使其可重用)并使用该视频中的想法来实现它,然后从push_backif调用它size == capacity
  4. 了解运算符重载,并实现 operator[] 以像在普通数组中一样访问元素。
  5. ...继续添加功能,直到你喜欢你的实现:) 我认为在学习从创造整洁的东西中获得乐趣时很重要。

最后,您可以将您的实现与std::vector或其他一些现有的动态数组进行比较,看看您是否遗漏了什么。大约三年前,我不得不在我的文凭工作中自己实现向量(出于性能原因对其修改和重新分配的细粒度控制),您也可以查看,但是(免责声明!)您可能会发现它有点复杂在我所有的优化尝试之后很混乱:)

前进!希望这会有所帮助(并对您有所启发)。

于 2013-10-11T07:01:22.077 回答