array erzeugen



  • Hallo,

    für ein Programm brauche ich ein zweidimensionales Array.
    Allerdings will ich die Anzahl der Reihen und Spalten während des Programmablaufs ändern können. Aber ich habe keine Ahnung wie ich das hinkriegen kann.

    Für Vorschläge wäre ich dankbar!

    Gruß,
    sceche



  • Ein dynamisches array kannst du mit new erzeugen. Alternativ solltest du dir mal STL-Container wie std::Vector ansehen. die wachsen dynamisch und raeumen am Schluss Auch selbst auf.



  • Könntet ihr mir vielleicht ein Beispiel angeben.
    Und wie lösche bzw. füge ich eine neue Reihe oder Spalte hinzu?
    Kenne mich da nämlich nicht so gut aus

    Danke im Voraus

    sceche



  • Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Man könnte es auch so machen. Dann nutzt man kein stl, doch es ist ein bisschen aufwändiger. Das ist jetzt nur eindimensional, aber Du kannst es ja ändern.

    template <typename T> class DynArray
    {
     public:
      DynArray() { //Default-Konstruktor
       str.len=1;
       str.array=new T[1];
       str.array[0]=0;
      }
      DynArray(int size) { //Überladener Konstruktor
       str.len=size;
       str.array=new T[size];
       for (int i=0; i<size; i++)
        str.array[i]=0;
      }
      ~DynArray() {
       delete [] str.array;
      }
      int Length (void) {
       return str.len;
      }
      void NewSize (int NewSize) {
        T *temp=new T[str.len];
        for (int i=0; i<str.len; i++)
         temp[i]=str.array[i];
        delete [] str.array;
        str.array = new T[NewSize];
        for (int i=0; i<NewSize; i++) {
         if(i<=str.len) str.array[i]=temp[i];
         else str.array[i]=0;
        }
        str.len=NewSize;
        delete [] temp;
       }
      void Insert (int key, T value) {
       if (key >= str.len || str.len==0) NewSize(key+1);
       str.array[key]=value;
      }
      T Read (int index) {
       if (index>str.len) NewSize(index+1);
      return str.array[index];
      }
      void Delete (int index) {
       if (index>str.len) NewSize(index+1);
       delete str.array[index];
       str.len--;
      }
      T operator [] (int index) {
       if(index >= str.len) NewSize(index+1);
       return str.array[index];
      }
     private:
      struct Ar {
       T *array;
       int len;
       } str;
    };
    

    lg, freakC++



  • Das sieht aber recht kompliziert aus...

    Was ist denn genau STL und wie gehe ich damit um?
    (Frage ist bestimmt total dumm, aber ich bin halt Anfänger 😉 )



  • Huhu,

    #include <vector> // STL-Vector
    
    int main()
    {
        std::vector<int> field ; // Deklaration
    }
    

    Für nähere Informationen siehe: vector - C++ Reference



  • Oder lies dich in die STL-Artikel aus dem Magazin ein:
    1) Container
    2) Iteratoren und Algorithmen
    3) Hilfsklassen und Erweiterungen



  • sceche schrieb:

    Das sieht aber recht kompliziert aus...

    Was ist denn genau STL und wie gehe ich damit um?
    (Frage ist bestimmt total dumm, aber ich bin halt Anfänger 😉 )

    Vergiß die STL. Es geht zwar mit einem Vector, in den Du Pointer auf Vektoren
    legst, aber das ist böse, weil kaum leserlich. Und wie siehts dann erst aus,
    wenn Du einmal drei oder vier Dimensionen brauchst? Machs mit Boost:

    http://www.boost.org/doc/libs/1_41_0/libs/multi_array/doc/user.html

    lg


Log in to reply