C ++添加到数组的末尾

时间:2014-04-20 12:54:36

标签: c++ arrays

我创建了一个指向动态向量指针的指针,名为" list"。

   listaFiguras::listaFiguras(){
    numElements = 0;
    list = new figuraGeom* [numElements];

}

这也是我的课程:

class listaFiguras {

    //Atributos
    int numElements;
    figuraGeom **list;

public :

    //Constructor sin parametros
    listaFiguras();

    //Destructor
    ~listaFiguras();

    //Sets y Gets
    void setnumElementos(int);
    virtual void setLista(figuraGeom**);

    int getnumElementos();
    virtual figuraGeom* getLista();

    //Vaciar lista
    void vaciarLista();

    //Añadir elemento
    void anyadirElemento(figuraGeom *);

};

现在我必须创建一个名为anyadirElemento的方法,但不明白我该怎么做:

将一个指向figuraGeom的指针作为参数,并添加到list指向的动态数组的末尾。

我明白了:

void listaFiguras :: anyadirElemento (figuraGeom * parameter) {



}

任何帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:2)

一个非常简单的动态数组定义如下:

  • 数组大小
  • 指向数组的指针

您需要知道阵列中当前有多少元素才能使用它们;在添加/删除元素时,您只需创建另一个包含一个或多个元素的数组(这涉及将旧数组复制到新数组中)。

注意:这是非常低效的添加元素是O(N),其中N是数组中已有的元素数,但它也非常简单,在实际代码中使用std::vector<T>执行添加以摊销的O(1)结束。

答案 1 :(得分:2)

如果使用std::vector<figuraGeom *>

代替动态分配的数组,会更简单

您必须保持数组中的当前位置以了解添加新值的位置。例如,假设您定义了类

的此类数据成员
int position;

并以某种方式将其初始化为零(例如在类的构造函数中)

然后,如果不能重新分配数组,该函数可以采用以下方式

void listaFiguras :: anyadirElemento (figuraGeom * parameter)
{
   if ( position < numElements ) list[position++] = parameter;
}

所以我将该类的数据成员定义为

class listaFiguras {

    //Atributos
    int numElements;
    int position;
    figuraGeom **list;
//...

如果允许放大最初分配的数组,那么每次当position等于numElements时,函数应该重新分配它,其中numElements也将被更改,或者你应该保留另一个存储数组当前大小的变量。 / p>