Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

11

13.01.2012, 11:23

ja sicher. aber ich finde das leichter und schneller zu schreiben (sehr triviales beispiel):

C-/C++-Quelltext

1
2
int data[10];
for(int i = 0; i < 10; i++){     data[i] = i;}



Im gegensatz dazu:


C-/C++-Quelltext

1
2
std::vector<int> data(10);
for(std::vector<int>::iterator it = data.begin(); it != data.end(); ++it){     *it = i;}



ausserdem wird meines wissens beim anlegen einer instanz der templateklasse eine konkrete klasse des Templatetypen angelegt - ist doch für solch kleinvieh bissl aufgebläht oder?

12

13.01.2012, 11:37

Naja, der Vorteil des Iterator Interfaces ist es, dass man sämtliche Standardalgorithmen aus der STL damit benutzen kann.

Das Anlegen der konkreten Klasse würde ich mehr oder weniger vernachlässigen. Das vergrößert ja ansich nur die ausführbare Datei, und macht das Compilieren etwas langsamer, aber an der Ausführgeschwindigkeit ändert sich ja nichts und auch der Speicherverbrauch pro Objekt dieser konkreten Klasse Objekt bleibt gleich.

Die Einträge in Vektoren können ja auch primitive Typen sein. Und wieso ist es manchmal schlimm, wenn man die Größe ändern kann? Klar, man verbraucht eine Variable für die tatsächliche (und evtl. für die reservierte) Größe, aber macht das heutzutage noch irgendwas aus? Meistens hat man ja nicht Arrays mit 2-5 Elementen sondern eher so viele, dass man die paar Metadaten gar nicht mehr merkt.

Und schreiben in eine Datei geht mit vectoren genauso einfach. Alleine schon, weil man ja mit &Vector[0] quasi ein Array hat, ähnlich wie string.c_str(). Und naja, man kann natürich nciht vergessen, dynamsiche Arrays zu löschen, was Memory Leaks vermeidet.

Ein Argument wäre vielleicht, dass man normale Arrays am Stack haben kann, was für kleine Arrays nett sein kann, weil man sich die 'langsame' Speicherallokation spart.

Und wenn einem das bisschen Overhead eines vectors stört, gibt es immer noch boost::array, was nicht langsamer oder größer als ein normales Array ist, aber ein schöneres Interface anbietet.
Lieber dumm fragen, als dumm bleiben!

idontknow

unregistriert

13

13.01.2012, 12:47

naja dazu brauchts nicht unbedingt boost::array. std::tr1::array gibts ja auch. Wollte das hier nur erwähnen weil imo gerade für Anfänger die STL dann irgerndwo doch die bessere Wahl ist denke ich :)

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

14

13.01.2012, 15:05

Naja, der Vorteil des Iterator Interfaces ist es, dass man sämtliche Standardalgorithmen aus der STL damit benutzen kann.

Das Anlegen der konkreten Klasse würde ich mehr oder weniger vernachlässigen. Das vergrößert ja ansich nur die ausführbare Datei, und macht das Compilieren etwas langsamer, aber an der Ausführgeschwindigkeit ändert sich ja nichts und auch der Speicherverbrauch pro Objekt dieser konkreten Klasse Objekt bleibt gleich.

Die Einträge in Vektoren können ja auch primitive Typen sein. Und wieso ist es manchmal schlimm, wenn man die Größe ändern kann? Klar, man verbraucht eine Variable für die tatsächliche (und evtl. für die reservierte) Größe, aber macht das heutzutage noch irgendwas aus? Meistens hat man ja nicht Arrays mit 2-5 Elementen sondern eher so viele, dass man die paar Metadaten gar nicht mehr merkt.

Und schreiben in eine Datei geht mit vectoren genauso einfach. Alleine schon, weil man ja mit &Vector[0] quasi ein Array hat, ähnlich wie string.c_str(). Und naja, man kann natürich nciht vergessen, dynamsiche Arrays zu löschen, was Memory Leaks vermeidet.

Ein Argument wäre vielleicht, dass man normale Arrays am Stack haben kann, was für kleine Arrays nett sein kann, weil man sich die 'langsame' Speicherallokation spart.

Und wenn einem das bisschen Overhead eines vectors stört, gibt es immer noch boost::array, was nicht langsamer oder größer als ein normales Array ist, aber ein schöneres Interface anbietet.
Ja doch ich weiss :rolleyes: ich nutze sie doch selber extensiv aber ich fand die aussage dass normale arrays zu verwenden schon gute gründe braucht fand ich etwas exzessiv. wenn jemand sagt warum zeiger wenn auch referenz geh ich voll mit - mehr wollte ich nicht kund tun.

Werbeanzeige