gpt4 book ai didi

C++使用指针创建可扩展数组

转载 作者:行者123 更新时间:2023-11-28 07:22:01 24 4
gpt4 key购买 nike

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

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

我正在考虑使用 int *contents 来指向一个整数数组,并随着 IntArray 的扩展而改变指针,但是我怎么知道我的初始整数数组的大小是多少?

最佳答案

正如 @aaronman 所说,如果我们只是给你最终的解决方案对你没有好处:如果你确实想学习一些东西,你最好在你的从头开始拥有(否则只需使用现有的 std::vectorQVector 或任何 vector )。

因此,我建议您查看一些教程或示例以获取灵感,然后从头开始。即使是简单的谷歌搜索c++ tutorial implementing dynamic array会给一些可以忍受的视频like this以及一些文本链接。

当你清楚了实现细节后,你可能想设计你的数组的接口(interface),可能需要考虑的要点如下:

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

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

继续!希望这对您有所帮助(并给您一些启发)。

关于C++使用指针创建可扩展数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19311036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com