Dynamisches Array vergrößern, verkleinern ...
-
Hey das is doch Perfekt

http://en.wikipedia.org/wiki/Vector_(C%2B%2B)
Das kann alles was ich brauche ...
Sogar "Default-Instanziierung".Vielen vielen Dank ...
Martin ...
-
In der Standardbibliothek gibts mehrere Container, die für die unterschiedlichsten Aufgaben zuständig sein können. Ich empfehle dir, als Einführung diesen Artikel durchzulesen.
-
Hi
Super danke

Schön ist auch, dass das Studio dir diese Container im Debugger so schön anzeigt.

Damit kann ich doch auch mit eingenen Klassen arbeiten ??
Muss ich dabei irgendwo aufpassen ?vector<MyLine> m_Lines;Gruß
Martin
-
martin_zi schrieb:
Damit kann ich doch auch mit eingenen Klassen arbeiten ??
Ja.
martin_zi schrieb:
Muss ich dabei irgendwo aufpassen ?
Nein, grundsätzlich werden alle Typen gleich gehandhabt (von der
std::vector<bool>-Spezialisierung mal abgesehen). Es spielt also keine Rolle, was du in den Container packst. Ich würde allerdings aufpassen, falls du Zeiger speichern willst und manuell Speicher mitnewunddeleteverwaltest, da passieren recht schnell Fehler. Aber solange du normale Objekte im Container hast, ist das kein Problem. Oder auch passive Zeiger gehen gut (solche, die nur auf ein Objekt zeigen, aber nicht für dessen Speicherverwaltung zuständig sind).
-
martin_zi schrieb:
Damit kann ich doch auch mit eingenen Klassen arbeiten ??
Ja, Du kannst vectoren als Member eigener Klassen verwenden.
martin_zi schrieb:
Muss ich dabei irgendwo aufpassen ?
Ja, Du solltest vector nicht als Basisklasse eigener Klassen verwenden und weil es ein Template ist könnte das Kompilat unerwartet groß werden [muss aber nicht]
-
Hi
Ja, Du solltest vector nicht als Basisklasse eigener Klassen verwenden und weil es ein Template ist könnte das Kompilat unerwartet groß werden [muss aber nicht]
Was meinst du damit ? Nicht davon ableiten ?
Grüße
-
martin_zi schrieb:
Hi
Ja, Du solltest vector nicht als Basisklasse eigener Klassen verwenden und weil es ein Template ist könnte das Kompilat unerwartet groß werden [muss aber nicht]
Was meinst du damit ? Nicht davon ableiten ?
Grüße
Ja. Das solltest du generell nicht von Klassen machen, die nicht dafür gedacht sind. (vor allem, wenn du vor hast sie polymorph zu benutzen)
-
Ganz genau. Die STL-Container stellen konkrete Typen dar und sind nicht dafür konzipiert, um von ihnen ableiten zu können. Nur bzgl. der Algorithmen solltest du auch aufpassen, die Klassen sollten ggf. bestimmte Operator-Überladungen bereitstellen.
-
Alles klar ..
Ad aCTa schrieb:
Nur bzgl. der Algorithmen solltest du auch aufpassen, die Klassen sollten ggf. bestimmte Operator-Überladungen bereitstellen.
Achso das ist klar sonst gibt es ja kein Kriterum um zu "vergleichen".
Ok danke für die Infos ...

Grüße
Martin
-
martin_zi schrieb:
Achso das ist klar sonst gibt es ja kein Kriterum um zu "vergleichen".
Du brauchst keinen Operator zu überladen, sondern kannst auch einen Funktor oder eine Funktion als Sortierkriterium angeben.
Das ist sogar oft sinnvoller, weil Operatoren nur überladen werden sollten, wenn ihre Bedeutung intuitiv ist. Zum Beispiel ist es mathematisch gesehen recht sinnfrei, für eine Vektorklasse einen Kleiner-Als-Operator anzubieten. Von der Benutzerseite her ist auch nicht klar, wie eine solche Ordnungsrelation definiert ist. Und abgesehen von assoziativen Containern oder Algorithmen, die ein "Strict Weak Ordering" benötigen, braucht man so einen Operator auch nie.
Algorithmen und Iteratoren werden übrigens in späteren Teilen des Artikels erläutert, den ich oben verlinkt habe.