Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Frage an die Cracks vom Anfänger!

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 <
000
04.08.2003, 00:52 Uhr
~Tobi
Gast


Hallo Ihr Cracks!

Ich habe folgende Frage:

Ich analysiere gerade einen fremden Sourcecode, und bin auf fologendes gestoßen:


Ich habe in einer h-Datei folgendes:

Code:
typedef double TText;


in einer anderen h-Datei steht:

Code:
vector<vector<vector<TText> > > blaText;



In einer cpp-Datei wird folgendes geschrieben:


Code:
blaText [time][blaNr][xyzNr] = ....



Wenn ich mir blaText im Debugger (vc++ 6.0) anzeigen lasse, so wird unter Myfirst - Myfirst nur ein "einziger" Wert angezeigt, nämlich: -1,00000000

Wie kann dann dem blaText[time][blaNr][xyzNr] überhaupt etwas zugewiesen werden, wenn es nur einen Wert im Vector gibt? Ich kann das nicht ganz nachvollziehen. Warum die drei []-Klammern? Kann mir bitte jemand das erklären?


Danke!

Gruß
Tobi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.08.2003, 01:18 Uhr
Pablo
Supertux
(Operator)


Ich verstehe deine Frage mit dem MyFirst nicht ganz. Aber ist einfach zu verstehen. Du weißt, was typedef heißt, oder? Das ist für die Frage unwichtig.


Code:
vector<vector<vector<TText> > > blaText;



blaText ist ein Vektor, dessen Elemente Vektoren sind, deren Elemente TText (double) Variablen speichern. Die 3 [] Klammern sind so zu versthene:

blaText[time] liefert das time.-te Elemente, das in blText gespeichert wird. Da dieses Element auch ein Vektor ist, heißt dass, dass dieses Element wohlmöglich weitere Elemente enthält. Also [blaNr] liefert das blaNr.-te Elemnet vom time.-.ten Element von blaText (weiter rekursiv denken). Da dieses Element wieder ein Vektor über TText ist, können wir aus das xzyNr.-te Element mit [xyzNr] zugreifen und wir bekommen somit ein TText Element.

Es lässt sich anders schreieben:

C++:
vector<vector<TText>>vec_ueber_vec_TText;
vector<TText>vec_TText;
TText var;
// Was ist an der Stelle time?
vec_ueber_vec_TText = blaText[time];
// Was ist an der Stelle blaNr?
vec_TText = vec_ueber_vec_TText[blaNr];
// Welches TText Element ist das xyzNr-ste Element
var = vec_TText[xyzNr];



Siehst du, das ist ein großer Aufwand, also kann ich das schneller machen.

C++:
TText var = blaText[time][blaNr][xyzNr];



In dienem Besipiel geht das aber umgekehrt, weil man da etwas speichert. Wann hast du dir die Variable anzeigen lassen? Nach Deklaration oder nach Ausführung der Zuweisung? Nach Deklaration ist logsich, dass der Vector leer ist, nach der Zuweisung, wüsste ich aber nicht warum.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.08.2003, 09:08 Uhr
virtual
Sexiest Bit alive
(Operator)


Also vector<TText> ist ja erstmal nichts anderes als ein leererVektor mit keinen Elementen drin. Ein

C++:
vector<TText> v;
v[100] = 1.2;


Wird ohne weitere Vorkehrungen also zu Problemen führen, weil Du mit v[100] auf ein nicht existentes Element zugreifst. Üblicherweise baut man Vektoren zunächst mal auf, bevor man mit dem Index Operator zuschlagen kann. zB

C++:
vector<TText> v(10); // Macht Vector groß genug, um später Elemente zu enthalten.
v.push_back(3.14); // 1. Element einfügen....
v.push_back(2.73);
v.push_back(1,41);
... // 96 weitere push_backs
v.push_back(1.0); // 100- Element einfügen


oder

C++:
TText data[] = { 3.14, ... 1.0 };
vector<TText> v(data, &data[100]);


oder

C++:
vector<TText> v(100, 1.0); // Vector mit 100 mal dem Wert 1.0


Bei einem mehrdimensionalen Vektor mußt du eben nun jeden Vector erstmal aufbauen, zB mit einer der og Möglichkeiten.
Wahrscheinlich wirst Du im Debugger noch immer nicht mehr als Myfirst oder sowas sehen, weil vector eben nicht ein C Array ist, sondern ein Objekt, welches seine eigene Art hat, das Array intern abzubilden.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 04.08.2003 um 09:08 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: