2013-10-11 125 views
0

给定这样一个结构,我该如何创建一个可扩展(向量)数组?C++用指针创建一个可扩展的数组

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

我想用INT *内容指向整数数组,只是改变指针作为IntArray扩大了,但我怎么知道是什么尺寸,使我的整数的初始阵列?

+0

“可扩展阵列”你的意思是'的std :: VECTOR' – aaronman

+0

是像一个矢量 – user1985251

+0

你为什么不只是使用矢量 – aaronman

回答

1

作为@aaronman说,这将是不适合你,如果我们只是给你的最终解决方案:如果你想学习的东西,你最好试试这个你自己从头开始(否则只使用现有的std::vectorQVector或任何向量)。

所以相反,我建议你看一些教程或灵感的一些exapmles,然后从头开始。即使简单谷歌搜索c++ tutorial implementing dynamic array将提供一些可容忍的视频like this以及一些文字链接。

后,您与实施细则明确,你可能会想设计自己的阵列的接口,并考虑点可以如下:

  1. 使struct这个class,而不是使字段默认为私有(encapsulation
  2. 在构造函数中执行初始分配并在内部执行中取消分配(请参阅@juanchopanza的注释)。拷贝构造函数和赋值操作符都还不错,但恕我直言,可在此时被忽略(例如,你可以让他们私人不执行简单地禁止复制)
  3. 实现所有的功能方法,例如,一种方法push_back可能会增加结束。您会看到添加元素可能导致重新分配,因此将重新分配过程提取到另一个(可能是私有的)方法(使其可重用)并使用该视频中的想法实施它,然后将其从push_back中调用,如果size == capacity
  4. 了解运算符重载,并实现operator []以像访问正常数组一样访问元素。
  5. ...继续添加功能,直到你喜欢你的实现:)我认为这是重要的,当学习享受创造一些整洁。

最后,您可以将您的实施与std::vector或其他现有的动态数组进行比较,以查看您是否缺少某些东西。大约三年前,我不得不自己执行我的文凭工作中的矢量(为了细致地控制其修改和重新分配的性能原因),您可能还会检查it,但是(免责声明!)您可能会发现它有点复杂和杂乱后,我所有的优化:)

继续!希望这有助于(并激励你一点)。