PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++: Konstruktor soll grösse eines 2D Vektors festlegen



newton
04-08-2004, 16:28
Hi,
ich habe ne klasse, da hab ich nen 2D Vektor drin:



class world
{
vector<vector<int> > world_matrix;
public:
world(int,int);
};


Jetzt soll der Konstruktor die groesse des vektors festlegen.
Ich könnte wahrscheinlich mit push_back einfach Element für Element anhängen(wie würde das den für nen 2D Vektor aussehen ?), aber dann müsste ja ev. die Kapazität verändert werden, was ja dann O(n) Laufzeit hätte.
Wenn ich mir aber einmal ne Welt konstruiere, dann soll sie nicht ihre grösse ändern ;) so das ich ihr ja von Anfang an die richtige grösse verpassen könnte.

Also meine Frage ist, wie muss mein Konstruktor aussehen, damit er das gewünschte leistet ?

Gruss,
Newton

Boron
04-08-2004, 16:38
Nur mal so kurz gesucht: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang98/HTML/VECTOR_vectorCCvector.asp#vector::vector

Vielleicht leistet der zweite Konstruktor das was du willst: Einen Vector mit einer bestimmten Größe anlegen lassen.

wraith
04-08-2004, 17:03
class world
{
std::vector<std::vector<int> > world_matrix;
public:
world(int x,int y) : world_matrix(x,std::vector<int>(y)) {}
};

axeljaeger
04-08-2004, 19:14
Was spricht für vector und gegen valarray (letzteres ist schneller).

wraith
04-08-2004, 19:32
Was spricht für vector und gegen valarray (letzteres ist schneller).
Schneller in was?
Der OP will imo ja nur einen Indexzugriff haben, rechnen will er ja nicht (es handelt sich ja nicht um eine mathematische Matrix) was nützt dann valarray?

Weiterhin ist valarray nichtmal dafür geeignet, wofür es eigentlich entworfen wurde.
Die Spezifikation wurde nur halbherzig gemacht (*alle* mathematisch/numerisch versierten Mitglieder sind vor der Verabschiedung des Standards aus dem Komitee ausgeschieden).
Momentan gibt es zwei Grenzimplementierungen, die nicht-standardkonforme, aber hochoptimierte von gnu.
Und die 100% standardkonforme, aber 'langsame' von Dinkumware.

Im Zweifel lieber eine externe Library hinzuziehen, zb. Blitz.

newton
05-08-2004, 09:03
Vielen Dank an wraith, Dein codeschnipsel hat geholfen.

Zur Diskussion valarray versus vektor:
Die Matrix soll eine stark vereinfachte Robotterwelt darstellen, und im Grunde braucht sie nur Nullen und Einsen zu enthalten (1 ist Hinderniss). Sind diese einmal gesetzt(also wenn die Welt fertiggebaut ist), so soll sie nicht verändert werden. Noch speichersparender wäre natürlich, das ganze als bitvektor (bzw Matrix) darzustellen ;)

Gruss,
Newton