vector vs. eingebautes array
-
ich habe ein string-array von max. 24x24 elementen.
ist es Ressourcenverschwendung, wenn man dafür einen vector nimmt (das array kann kleiner sein als 24x24, nie größer)?
wenn man ein string-array von 24x24, also das Maxiumum definiert, kann man mit ja auch mit dem kleineren Bereich arbeiten.
Was meint ihr?
-
std::vector ist IMMER dem C-Array vorzuziehen! Es gibt keinen Grund vector nicht zu benutzen.
-
hi!
ein std::vector is ein dynamisches array....dh du musst bei der initialisierung keinen fixe grösse des vectors definieren...du kannst dann immer ein element hinzufügen, so viel du halt speicher hast;-)
weiter infos siehe da:
http://www.codeguru.com/Cpp/Cpp/cpp_mfc/stl/article.php/c4027/
http://www.codeguru.com/Cpp/Cpp/cpp_mfc/arrays/article.php/c4071/cu
-
Artchi schrieb:
std::vector ist IMMER dem C-Array vorzuziehen! Es gibt keinen Grund vector nicht zu benutzen.
Nein. Nicht IMMER. Warum gibt es zum Beispiel boost::array?
-
aber ein vector hat riesigen Overhead. der ist doch größer als die evtl. Speichervergeudung, wenn man nicht unbedingt 24x24 Elemente braucht. Oder?
-
Ingo schrieb:
aber ein vector hat riesigen Overhead.
Ja? Das hört sich interessant an. Wärest du so nett deine Messungen mal zu posten?
-
Beim Anlegen des Vectors entsteht natürlich ein riesen Overhead im Vergleich zu einem statischen Array. Aber wenn du die Größe nicht änderst (z.B. durch Einfügen neuere Werter) dann ist die Performance genau gleich beim Zugriff.
-
finix schrieb:
Ingo schrieb:
aber ein vector hat riesigen Overhead.
Ja? Das hört sich interessant an. Wärest du so nett deine Messungen mal zu posten?
Was gibt es da zu messen? Der vector hat mehr Speicher reserviert als du brauchst => Speicherverschwendung.
-
Ben04 schrieb:
finix schrieb:
Ingo schrieb:
aber ein vector hat riesigen Overhead.
Ja? Das hört sich interessant an. Wärest du so nett deine Messungen mal zu posten?
Was gibt es da zu messen? Der vector hat mehr Speicher reserviert als du brauchst => Speicherverschwendung.
Ja? Wird ja ständig interessanter. Würde trotzdem fast vermuten dass du mit einem Array IMMER den maximal benötigten Speicher reserviert hast. Mit dem vector nicht. Und da der maximal benötigte Speicher bekannt ist wirst du auch mit dem vector nicht mehr Speicher reserviert haben als du brauchst.
-
Wird höchste Zeit den Hauptspeicher von 640 KB auf 2MB aufzurüsten.
-
string Werte[24]; // macht gleich 24 strings in den Speicher vector<string> werte; // macht das nicht.
-
vector<string> werte(24); // macht das
-
Ich sach doch, es gibt keinen Grund vector nicht zu benutzen. Aber wenn ihr gerne für diese Erkenntnis lieber über eine Seite diskutieren wollt, bitte. :p
-
Chew-Z schrieb:
Wird höchste Zeit den Hauptspeicher von 640 KB auf 2MB aufzurüsten.
Blödsinn, mehr als 640K braucht doch niemand.
-
Artchi schrieb:
std::vector ist IMMER dem C-Array vorzuziehen! Es gibt keinen Grund vector nicht zu benutzen.
falsch.
-
volkard schrieb:
Artchi schrieb:
std::vector ist IMMER dem C-Array vorzuziehen! Es gibt keinen Grund vector nicht zu benutzen.
falsch.
sehe ich auch so. vector benutzt doch den heap ne? wenn man das nicht will ist vector nicht das richtige
-
net schrieb:
volkard schrieb:
Artchi schrieb:
std::vector ist IMMER dem C-Array vorzuziehen! Es gibt keinen Grund vector nicht zu benutzen.
falsch.
sehe ich auch so. vector benutzt doch den heap ne? wenn man das nicht will ist vector nicht das richtige
Naja, das hat damit wohl aber nix zu tun. Wenn die Arraygröße defintiv feststeht, und sich auch nich ändern wird (sofern man das absehen kann) spricht natürlich auch nichts dagegen, ein normales Array zu benutzen.
-
Naja, das hat damit wohl aber nix zu tun. Wenn die Arraygröße defintiv feststeht, und sich auch nich ändern wird (sofern man das absehen kann) spricht natürlich auch nichts dagegen, ein normales Array zu benutzen.
Wer gerne die Indexprüfung des vectors nutzen will, wird wohl kein Array
nutzen, auch "wenn sich nicht ändern wird".
-
net schrieb:
volkard schrieb:
Artchi schrieb:
std::vector ist IMMER dem C-Array vorzuziehen! Es gibt keinen Grund vector nicht zu benutzen.
falsch.
sehe ich auch so. vector benutzt doch den heap ne? wenn man das nicht will ist vector nicht das richtige
Es gibt afaik die Möglichkeit, sich seinen eigenen Allokator zu schreiben. Aber wer macht das schon?
Ansonsten sehe ich es ähnlich. Pauschal zu sagen, dass std::vector immer vorzuziehen ist, ist imo falsch. std::vector ist nunmal mehr als nur ein simples Array, und diese erweiterte Funktionalität ist nicht immer erwünscht.
Ich würde eher sagen, dass man sowas wie boost::array einem built-in Array vorziehen sollte.
-
Anders ist es vielleicht treffender formuliert. Es gibt IMHO niemals irgendeinen Grund, ein rohes C-Array zu verwenden. C-Arrays sind eines der lamesten und schlechtesten und hässlichsten Sachen, die ich überhaupt kenne.
Wenn man sich wirklich gegen nen std::vector entscheidet, sollte man wenigstens statt nem C-Array boost::array nehmen.