dynamisches Array immer wieder erhöhen...

R

Ronax

Hallo,

also in delphi ging das nach der Art
SetLength();

Gibt es in C++ (Borland) auch eine Möglichkeit, mein Array immer um ein Element zu erhöhen?

struct Images {
AnsiString FilePath;
} Imageslist[10];
 
Moin moin,
es gibt die Möglichkeit der dynamischen Speicherallokierung. Vielleicht mal nach "Pointer" "new" "delete" und für Standard C "malloc" "realloc" "calloc" suchen.

Gruss Michael
 
Also wenn Du mit einem C Array arbeiten möchtest, musst Du mit speicherallozierenden Aufrufen arbeiten, beispielsweise mit malloc(). Das ist allerdings, gerade für Anfänger, fehleranfällig.
Da Du C++ einsetzen möchtest, würde ich Dir, statt zu einem Array eher zu einem std::vector raten, das ist sozusagen ein dynamisches Array und bietet Dir zahlreiche Funktionen. Folgendes Beispiel illustriert die Verwendung für Dein Beispiel:
Code:
#include <vector>
#include <string>
#include <iostream>

struct Images {
        std::string FilePath;
};

int main()
{
        std::vector<Images> Imagelist(10);
        for(unsigned int i = 0; i < Imagelist.size(); ++i)
                Imagelist.at(i).FilePath = "TestWert";

        std::cout << Imagelist.at(4).FilePath << std::endl;

        std::cout << "max_size(): " << Imagelist.max_size() << std::endl;
        std::cout << "size():     " << Imagelist.size()     << std::endl;
        std::cout << "capacity(): " << Imagelist.capacity() << std::endl;

        Imagelist.resize(20);

        std::cout << "max_size(): " << Imagelist.max_size() << std::endl;
        std::cout << "size():     " << Imagelist.size()     << std::endl;
        std::cout << "capacity(): " << Imagelist.capacity() << std::endl;

        return 0;
}
Mit size() kann man die Anzahl der Elemente eines Vektors erfragen, empty() fragt ab, ob der Vektor leer ist, max_size() gibt die maximal möglichen Elemente zurück, capacity() die maximale Größe bis eine Reallozierung stattfinden muss (mit reserve() kann man sich schon im Vorfeld Speicher besorgen).
Zum Einfügen neuer Elemente kann man entweder mit insert() arbeiten, oder den »subscript operator« [ ] wie bei einem Array einsetzen, oder Funktionen wie push_back(), push_front(), oder -- was ich hier sehr geschickt finde, at(), da die letzte Funktion eine Exception wirft, falls man ausserhalb des gültigen Bereichs liegt.

Ferner würde ich Dir empfehlen, statt des proprietären AnsiString nach Möglichkeit den Standard string »std::string« zu benutzen -- so machst Du Deine Programme portabler und gewöhnst Dich schneller um, falls Du mal andere Übersetzer oder Plattformen benutzen sollst.

Und dann solltest Du Dich mal mit den ganzen Funktionen der STL vertraut machen. Sehr zu empfehlen ist das (englischsprachige) buch von Nicolai M. Josuttis (war im Standardisierungsgremium dabei) »The C++ Standard Library«. Im Web gibt es auch http://www.cppreference.com

HTH,
Martin
 
Zurück