Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » KDevelop / Qt / wxWidget » dynamisches Array

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
02.08.2004, 08:54 Uhr
~Melcho
Gast


Hallo, kann mir jemand sagen, wie ich ein dynamisches Array erstelle und dessen Größe ändern kann?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.08.2004, 09:41 Uhr
virtual
Sexiest Bit alive
(Operator)


Mag sein, daß Qt weitere Möglichkeiten bietet, aber in C wäre die erste Wahl realloc:

C++:
/*
* Vergroessert/verkleinert arrays, welches Elemente vom Typen X enthält.
* @param array   pointer of das Array (darf auf eine NULL zeigen)
* @param size     Gewünschte Größe des Arrays
* @return 0, wenn ok, -1, wen kein Speicher
*/

int resize_array(X** array, size_t size) {
    X* temp = (X*)realloc(*array, size*sizeof(X));
    if (NULL == temp) return -1;
    *array = temp;
    return 0;
}

/*
* Anwendungsbeispiel
* (in resize_array sollte nun X durch int setzt werden.
*/

int main() {
     int* array = NULL;
     size_t anzahl = 0;
     int zahl;

     printf("Gebe Zahlen ein, soviel wie Du willst; 0 für ende.\n");
     while(scanf("%d", &zahl)==1 && zahl!=0) {
          if (resize_array(&array, anzahl+1) {
              printf("Fehler: kein Speicher beim Speichern von Zahl %d\n", anzahl+1);
              if (NULL != array) free(array);
              exit(1);
          }
          array[anzahl++] = zahl;
     }

     ...
     if (NULL != array) free(array);
     exit(0);
}



In C++ würde man wohl eher std::vector oder std::list verwenden, was die dynamische Speicherverwaltung für einen übernimmt. Gleiches Beispiel wie oben in C++:

C++:
#include <iostream>
#include <iterator>
#include <vector>

int main()
{
    std::cout<<"Gebe Zahlen ein, soviel wie Du willst; 0 für ende."<<std::endl;
    std::vector<int> array;
    int zahl;
    for(;;) {
         std::cin>>zahl;
         if (!std::cin || zahl==0) break;
         array.push_back(zahl);
         // Alternativ:
         /*
         try {
             array.push_back(zahl);
         }
         catch(std::bad_alloc bae) {
             std::cerr<<"Kein Speicher beim Speichern von Zahl "<<(array.size()+1)<<std::endl;
             return 1;
         }
         */

    }
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.08.2004, 13:20 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


da qt klassen verwendet (was stark auf c++ hinweist ) muss man sich nicht mit realloc rumschlagen sondern kann auch stl-containerklassen verwenden...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 02.08.2004 um 13:21 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.08.2004, 13:30 Uhr
~Melcho
Gast


@virtual
Dein Beispiel ist mir leider etwas zu kompliziert und ich bekomme es nicht zum Laufen. In Delphi war das doch immer so einfach mit SetLength... geht das in c++/qt nicht auch einfacher so wie in Delphi?
@windalf
Hast du acuh ein Beispiel für mich? Wäre nett, danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.08.2004, 20:09 Uhr
typecast
aka loddab
(Operator)


In C++ gibt es verschiedene Container mit denen du so was machen kannst (std::vector, std::list, std::map...).
Jede Klasse hat ihre Vor- und Nachteile.

Wenn du genauer beschreibst, was du machen willst, dann koennen wir dir da ein Beispiel geben, dass zu deinem Problem passt.

PS: Nicht nur Standard C++ bietet verschiedene Container an, auch Qt hat sowas
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.08.2004, 20:16 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@Melcho
ein beispiel hat dir virtual doch schon in seinem zweiten Teil des Postes geschrieben. Mein beitrag sollte dir lediglich sagen, das du dich nicht mit dem ersten teil rumärgern musst.

eine allgemeingültige anwort ist da ein wenig schwer, virtual hat sich ja schon richtig mühe gegeben dir was allgemeingültiges mit code zu schicken, soviel mühe hätten sich die meisten wohl nicht gegeben...
wenn du was genaueres willst halt dich an die aussage von typecast
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
03.08.2004, 07:32 Uhr
~Melcho
Gast


Ok, ich habs nun doch hinbekommen. Wie man einzelne Elemente oder alle löscht hab ich schon rausgefunden. DIe Anzahl der Datensätze hab ich auch. Aber wie kann ich die Daten nun aus dem Array auslesen? Danke für die Hilfe!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
03.08.2004, 08:09 Uhr
~Melcho
Gast


Ich habs selber herausgefunden, ist ja einfacher als ich dachte:
array[index];
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
09.08.2004, 07:48 Uhr
~Melcho
Gast


Könnt ihr mir auch sagen wie man ein 2-dimensionales dynamisches Array erstellen kann?
Danke im voraus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
09.08.2004, 11:39 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


die einfache variante

C++:
std::vector< std::vector< datentyp > > myarray;



oder die lange variante

C++:
int x, int y;
x=...;
y=...;
datentyp **myarray;
myarray= new datentyp*[x];
for(int i=0;i<x;++i)myarray[i]=new datentyp[y];

//am ende freigeben nicht vergessen


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 09.08.2004 um 11:39 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ KDevelop / Qt / wxWidget ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: