PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++]3D-Array mit vector?


pippo
2006-03-30, 15:50:54
Ich hab vor, eine Datei einzulesen und würde mich am leichtesten tun, wenn ich ein 3D-Array hätte. Ist es möglich, dies mit vector zu realisieren und wenn ja, wie lautet die Syntax. Bisher hab ich 2D-Arrays immer folgendermaßen gemacht:

vector< vector<char> > Name(Größe1, vector<char>(Größe2));

Hab schon in nem C++ Forum gefragt, aber da ist man einfach nur komplett unfähig auf diese Frage zu antworten.

Coda
2006-03-30, 16:02:02
vector<vector<vector<char> > > test(size1, vector<vector<char> >(size2,vector<char>(size3)));Hab schon in nem C++ Forum gefragt, aber da ist man einfach nur komplett unfähig auf diese Frage zu antworten.
Das ist nicht ungewöhnlich ;D

pippo
2006-03-30, 16:07:13
Wie meinst du das? :)

Thx für den Code, werds gleich mal testen

Coda
2006-03-30, 16:08:05
Wie meinst du das? :)
Das es ziemlich viele selbsternannte "C++-Gurus" gibt ;D

PS: Darf ich Alternative noch boost::multi_array (http://www.boost.org/libs/multi_array/doc/index.html) anbieten?

pippo
2006-03-30, 16:17:11
Da hast du wohl wahr :D
Danke, aber vorerst werd ichs mal mit vector machen, da weiß ich wie ich vorzugehen hab. Werde es mir aber mal durchlesen, vielleicht dann beim nächsten mal oder wenn ich das Programm mal überarbeite

pippo
2006-03-30, 16:44:50
Jetz ist mir grad noch was aufgefallen: Wenn ich so ein Array an eine Funktion übergebe, dann hab ich das früher immer so gemacht:


int main (){
...
Funktion (Pixel);
return 0;
}

Funktion (vector< vector<char> > &Pixel) {
...
}

Bei meinem 3D-Array sind aber die 1. und die 2. Dimension char, da hier Namen reinkommen und die 3. Dimension float, da hier bestimmte Werte eingelesen werden. Wie kann ich sowas nun übergeben?

Coda
2006-03-30, 17:24:12
Die Dimensionen sind bei vector immer vom Typ "int", d.h. du kannst nicht mit einem String indizieren. Da bräuchtest du eher std::map.

DocEW
2006-03-30, 17:33:35
Nur mal so Interesse: Was ist das denn für eine Datei, daß du so ein Konstrukt benötigst? :)

pippo
2006-03-30, 17:40:32
Die Dimensionen sind bei vector immer vom Typ "int", d.h. du kannst nicht mit einem String indizieren. Da bräuchtest du eher std::map.

Wieso wird das nur immer falsch verstanden? :) Die Werte, die ich speichern will, sind char, char und float.

Die Datei sieht so aus:
Hersteller Modell Wert1 ... Wert7

Jetz sinds halt 20 Hersteller mit je 9-11 Modellen ;)

Coda
2006-03-30, 22:20:31
Hä? Char? Dann doch eher std::string oder nicht?

Gast
2006-03-30, 22:31:10
warum nicht einfach ne struct

pippo
2006-03-31, 09:43:21
Hä? Char? Dann doch eher std::string oder nicht?
Hast recht, ja ;)

@ Gast
Weil ich zum einen dachte, mit einem Array sei es wesentlich einfacher und zum anderen, weil ich nicht weiß, wie ich das mit ner Klasse umsetzen kann

Coda
2006-03-31, 09:57:44
struct Entry
{
std::string hersteller, modell;
std::vector<float> values;
};

void foo()
{
std::vector<Entry> entries;

Entry new_entry;
new_entry.hersteller = "Hersteller";
new_entry.modell = "Modell";
new_entry.values.push_back(20.0f);
new_entry.values.push_back(124.0f);

entries.push_back(new_entry);
}