Das hinzufügen, um dynamische array

Disclaimer: ja, ich weiß, über std::vector. Ich Tue dies zum Wohle des Lernens.

Ich bin dabei, eine dynamische array-Klasse, und ich bin versucht zu bekommen add, um zu arbeiten.

template <class T>
void Array<T>::add(T value)
{
    T * tmp = new T[mCount];

    for (int i = 0; i < mCount; i++)
    {
        tmp[i] = mData[i];
    }

    mCount++;

    delete[] mData;
    mData = tmp;

    mData[mCount - 1] = value;
}

Funktioniert es... irgendwie. Die Funktion arbeitet, hinzufügen das element, aber dann stürzt das Programm ab beim beenden. Keine Fehler, kein gar nichts. Es ist einfach einfriert, und ich habe, um es zu schließen, verwenden (Umschalt + F5).

So, was ist daran falsch?

Hier ist meine ganze Klasse. Wenn ich nicht include eine Funktion, die es bedeutet, es gibt kein code.

#ifndef ARRAY_H
#define ARRAY_H

using namespace std;

template <class T>
class Array
{
private:
    T * mData;
    int mCount;

public:
    Array();
    ~Array();

    void add(T value);
    void insert(T value, int index);
    bool isEmpty();
    void display();
    bool remove(T value);
    bool removeAt(int index);
    int size();

    T & operator[](const int index);
};

//Constructors /Destructors
//--------------------------------------------------------

template <class T>
Array<T>::Array()
{
    mCount = 0;
    mData = new T[mCount];
    for (int i = 0; i < mCount; i++)
        mData[i] = 0;
}

template <class T>
Array<T>::~Array()
{
    delete[] mData;
}

//General Operations
//--------------------------------------------------------

template <class T>
void Array<T>::add(T value)
{
    T * tmp = new T[mCount];

    for (int i = 0; i < mCount; i++)
    {
        tmp[i] = mData[i];
    }

    mCount++;

    delete[] mData;
    mData = tmp;

    mData[mCount - 1] = value;
}

template <class T>
void Array<T>::display()
{
    if (isEmpty())
    {
        cout 
            << "The array is empty."
            << "\n\n";
        return;
    }

    cout << "(";

    for (int i = 0; i < mCount; i++)
    {

        cout << mData[i];

        if (i < mCount - 1)
            cout << ", ";
    }

    cout << ")" << "\n\n";
}

template <class T>
bool Array<T>::isEmpty()
{
    return mCount == 0;
}

template <class T>
int Array<T>::size()
{
    return mCount;
}

//Operator Overloads
//--------------------------------------------------------

template <class T>
T & Array<T>::operator[](const int index)
{
    return mData[index];
}

#endif

Benötigen Sie weitere info laß mich wissen, und ich kann post-it.

OT, aber warum nicht std::vector?
für pädagogischen Zweck
Sicherlich müssen Sie mcount + 1 in der array-Deklaration zu vermeiden, dass eine array out of bounds exception
Der erste Fehler ist in add Funktion. Ändern Sie den code, um T * tmp = new T[mCount + 1];
Was ist die invariante der mCount?

InformationsquelleAutor Gurman8r | 2015-10-10

Schreibe einen Kommentar