给定这样一个结构,我如何创建一个可扩展(向量)数组?
struct IntArray {
int size;
int capacity;
int *contents;
};
我正在考虑使用 int *contents 指向一个整数数组,并在 IntArray 扩展时更改指针,但是我如何知道创建初始整数数组的大小?
给定这样一个结构,我如何创建一个可扩展(向量)数组?
struct IntArray {
int size;
int capacity;
int *contents;
};
我正在考虑使用 int *contents 指向一个整数数组,并在 IntArray 扩展时更改指针,但是我如何知道创建初始整数数组的大小?
正如@aaronman所说,如果我们只是给你最终的解决方案,那对你没有好处:如果你确实想学习一些东西,你最好自己从头开始尝试(否则只使用现有的std::vector
或QVector
任何向量) .
因此,我建议您查看一些教程或示例以获得灵感,然后从头开始。即使是简单的谷歌搜索实现动态数组的 c++ 教程也会给出一些像这样的可容忍视频以及一些文本链接。
搞清楚实现细节后,可能要设计数组的接口,需要考虑的点可能如下:
class
而不是struct
默认情况下将字段设为私有(封装)push_back
可能会添加到结尾。您会看到添加元素会导致重新分配,因此最好将重新分配过程提取到另一个(可能是私有的)方法中(以使其可重用)并使用该视频中的想法来实现它,然后从push_back
if调用它size == capacity
。最后,您可以将您的实现与std::vector
或其他一些现有的动态数组进行比较,看看您是否遗漏了什么。大约三年前,我不得不在我的文凭工作中自己实现向量(出于性能原因对其修改和重新分配的细粒度控制),您也可以查看它,但是(免责声明!)您可能会发现它有点复杂在我所有的优化尝试之后很混乱:)
前进!希望这会有所帮助(并对您有所启发)。