Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » mehrdimensionale vektoren

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
15.04.2005, 16:08 Uhr
Lensflare



hi.

hab es jetzt endlich hinbekommen vektoren zu erstellen und zu nutzen aber wie erstellt man mehrdimensionale vektoren?

so hab ich die eindimensionalen geschrieben:

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

using namespace std;

int main()
{
  vector<int> myvector(1);
  
  myvector[7] = 100;
  myvector[9] = 101;

  printf("%i",myvector[7]);  // 100 wird ausgegeben
};



ich benutze die vektoren, wenn ich ein mehrdimensionales array in einer klasse brauche und die grösse des arrays erst bei der erzeugung des objekts festgelegt wird. Bei den normalen arrays gibts ja probleme, weil die grösse des arrays beim compilieren benötigt wird. Bei vektoren kann ich die grösse während der laufzeit festlegen.
Ich hoffe es ist vernünftig so zu programmieren.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 15.04.2005 um 16:09 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.04.2005, 16:14 Uhr
Oliver
S2-Pixelgeneral



C++:
vector<vector<int>> myvector_2D;


--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.04.2005, 16:22 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


sollte dein compiler das von olli vorgeschlagene nicht fressen mach ein leerzeichen zwischen die beiden schliessenden spitzen klammern....
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.04.2005, 16:34 Uhr
Lensflare



ok, das geht schon mal, aber:

C++:
vector< vector<int> > myvector_2D;
myvector_2D[7][9] = 100;


erzeugt einen absturz.

das gabs bei mir bei den eindimensionalen auch, bis ich denen eine minimale startgrösse von einem feld gegeben habe:

C++:
vector<int> myvector(1);


wie mach ich das bei mehrdimensionalen? Ich denke mal, dass die auch mindestens 1 feld gross sein müssen. also bei 2 dimensionen 1x1 Feld. leider geht

C++:
vector< vector<int> > myvector_2D(1,1);


nicht

EDIT:
jo, der compiler sieht die beiden >> sonst als einen operator
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 15.04.2005 um 16:37 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.04.2005, 17:03 Uhr
Oliver
S2-Pixelgeneral



Zitat:


wie mach ich das bei mehrdimensionalen? Ich denke mal, dass die auch mindestens 1 feld gross sein müssen. also bei 2 dimensionen 1x1 Feld. leider geht


C++:
vector< vector<int> > myvector_2D(1,1);






Naja, das geht dann nicht, du rufst ja den Konstruktor von einem ganz normalen Vektor auf und der nimmt halt nur ein Argument. Müsstest halt dann alle Elemente einzelnen "resizen":


C++:
std::vector< std::vector<int> > vec_2D(3);
    
for(unsigned i=0;i<vec_2D.size();++i)
    vec_2D[i].resize(8);
        
vec_2D[2][7]=2878;


--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )

Dieser Post wurde am 15.04.2005 um 17:04 Uhr von Oliver editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.04.2005, 17:20 Uhr
Th




C++:
vector<int> myvector(1);
  
  myvector[7] = 100;
  myvector[9] = 101;



Dies ist kein sauberer Programmierstil, da dies i. A. einen Zugriff auf nichtallokierten Speicher bedeutet.
Um einen Vektor auf eine bestimmte Größe zu bringen, mußt du mit push_back(x) einzeln jeden Wert hinzufügen oder aber im Konstruktor die initiale Anzahl angeben (z.B. vector(10)) oder aber gleich einen Initialisierungswert für jeden Eintrag (z.B. vector(10, 42)).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
15.04.2005, 18:11 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


du kannst auch resize verwenden wenn du dich später entscheidest den vector stark zu vergrössern....
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
16.04.2005, 15:19 Uhr
Lensflare



@ Oliver:
danke, es funktioniert, aber

Zitat:

std::vector< std::vector<int> > vec_2D(3);


wieso übergibst du eine 3 an den Konstruktor? ich habe es mit einer 2 versucht und das geht auch. Bei 1 allerdings nicht. Kann es sein, dass die minimale zahl der anzahl der dimensionen entspricht?

die for-schleife versteh ich überhaupt nicht, weil ich nicht weiss, was size() und resize() macht. Und muss ich eine andere zahl als 8 an resize() übergeben, wenn ich einen anderen variablentyp als int verwende?

@ Th & Windalf:
also wie schon oben gesagt, wird bei meinem programm die grösse der vektoren während der laufzeit bestimmt und verändert.
Es wäre denk ich also besser, wenn ich gleich richtig mit dem Speicher umgehe.
Ich weiss leider nicht wie push_back() funktioniert oder resize()...
Könntet ihr mir das bitte erklären?
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 16.04.2005 um 15:22 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
16.04.2005, 16:04 Uhr
Lensflare



ähm noch was:

wie setze ich das mit den dimensionen fort? bei 3D zum beispiel?

folgendes geht schon mal nicht:

C++:
  vector< vector< vector<int> > > myvector_3D(3);
  
  for(unsigned i=0; i < myvector_3D.size(); ++i) myvector_3D[i].resize(8);
  
  myvector_3D[5][9][2] = 1003; //hier stürzt das programm ab
  
  printf("%i",myvector_3D[5][9][2]);


--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
16.04.2005, 19:06 Uhr
Frodenius



nun ja bei einem kann ich helfen: ein vektor mit einem element ist nicht sinnvoll, da man ja auch gleich eine int-zahl nehmen kann.
--
NI! ...and thanks for all the fish!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


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: