Template und tyedef???
-
bladerunner10 schrieb:
Geht't konkreter?
Ein überflüssiges ';' ist IMHO keine Glaubensfrage.Wieso? Es ist überflüssig, der Compiler ignoriert es einfach. Dann kann man es hinsetzen oder nicht, das stört doch niemand. Es ist eine reine Stilfrage, ob man es schön findet, dort noch ein Semikolon hinzusetzen oder nicht. Das ist völlig subjektiv und hat nichts mit der Funktionalität des Programms zu tun.
Oder die Sache mit dem void weglassen. Mache ich persönlich auch, aber es ändert auch nichts an der Funktionalität des Programms. Vielleicht findet das jemand eindeutiger, wenn dort ein void steht. Das ist jedem frei gelassen.
Dann der C'tor und D'tor: Ich schreibe auch die leeren immer hin. Ich habe es gern, wenn ich gleich sehe was die machen. Wenn die nicht da sind, suche ich die völlig vergebens und das kostet Zeit. Daher immer hin schreiben. Ist auch praktisch, wenn man Dinge an der Klasse verändert, dann sieht man die C'tors und weiss gleich, AH, da muss ich auch noch was ändern. Aber vielleicht empfindet da jemand anders, das ist völlig subjektiv.
Und das 4. finde ich einfach nur witzig. Wieso willst du ihm einen std::vector andrehen? Ich sehe im Gegenteil immer viel zu viele Leute, welche einen std::vector benutzen und dabei besser mit einer std::list oder std::deque bedient wären. Aber das ist ja an sich schon eine witzige Frage. Willst du bei jedem die Frage stellen, welcher eine std::list benutzt?

Grüssli
-
Dravere schrieb:
bladerunner10 schrieb:
Geht't konkreter?
Ein überflüssiges ';' ist IMHO keine Glaubensfrage.Wieso? Es ist überflüssig, der Compiler ignoriert es einfach. Dann kann man es hinsetzen oder nicht, das stört doch niemand. Es ist eine reine Stilfrage, ob man es schön findet, dort noch ein Semikolon hinzusetzen oder nicht. Das ist völlig subjektiv und hat nichts mit der Funktionalität des Programms zu tun.
Richtig, hat nichts mit der Funktionalität zu tun. Ich schreibe über all in meinem Kot gerne überflüssige ';'
Dravere schrieb:
Oder die Sache mit dem void weglassen. Mache ich persönlich auch, aber es ändert auch nichts an der Funktionalität des Programms. Vielleicht findet das jemand eindeutiger, wenn dort ein void steht. Das ist jedem frei gelassen.
Wie Du willst. Für mich ist es ein C-ism.
Dravere schrieb:
Dann der C'tor und D'tor: Ich schreibe auch die leeren immer hin. Ich habe es gern, wenn ich gleich sehe was die machen. Wenn die nicht da sind, suche ich die völlig vergebens und das kostet Zeit. Daher immer hin schreiben. Ist auch praktisch, wenn man Dinge an der Klasse verändert, dann sieht man die C'tors und weiss gleich, AH, da muss ich auch noch was ändern. Aber vielleicht empfindet da jemand anders, das ist völlig subjektiv.
Ja ich schreibe auch gerne Kot hin, der nix bewirkt, nur um zu sehen, daß der nix bewirkt...
Dravere schrieb:
Und das 4. finde ich einfach nur witzig. Wieso willst du ihm einen std::vector andrehen? Ich sehe im Gegenteil immer viel zu viele Leute, welche einen std::vector benutzen und dabei besser mit einer std::list oder std::deque bedient wären. Aber das ist ja an sich schon eine witzige Frage. Willst du bei jedem die Frage stellen, welcher eine std::list benutzt?

Ja, eigentlich schon. Nämlich um zu sehen, ob der/die versteht, was er/sie da tut.
Und der std::vector sollte erstmal der "Default-Container" sein.Gute Nacht...
-
bladerunner10 schrieb:
Richtig, hat nichts mit der Funktionalität zu tun. Ich schreibe über all in meinem Kot gerne überflüssige ';'
Schön, wenn du das nicht gerne machst, aber wieso musst du es anderen verbieten und deinen eigenen Stil probieren anderen aufzuzwingen?
Bei einzeilern schreibe ich immer ein Semikolon am Schluss, obwohl es überflüssig ist, aber ich finde das macht einen guten Abschluss.
Es ist ein reines: "Ich finde es schön!" ... "Ich nicht!" ... daher Glaubensfrage.bladerunner10 schrieb:
Wie Du willst. Für mich ist es ein C-ism.
Wie du willst, aber verkaufe deine subjektive Meinung nicht als faktische Tatsache!
bladerunner10 schrieb:
Ja ich schreibe auch gerne Kot hin, der nix bewirkt, nur um zu sehen, daß der nix bewirkt...
Du machst das vielleicht nicht gern, aber das heisst nicht, dass dies für alle gilt. Es ist so eine EXTREM SUBJEKTIVE Sache und du setzt dich hin und verkaufst deine Subjektivität als Tatsache, dass ist ja schon fasst arrogant.
Glaubst du auch nicht an Gott und deshalb darf niemand an Gott glauben?
bladerunner10 schrieb:
Ja, eigentlich schon. Nämlich um zu sehen, ob der/die versteht, was er/sie da tut.
Verstehst du es denn?

bladerunner10 schrieb:
Und der std::vector sollte erstmal der "Default-Container" sein.
Also wenn schon überhaupt, dann std::deque, da es std::vector und std::list vereinigt.
bladerunner10 schrieb:
Gute Nacht...
Schlaf gut und schöne Träume.
Grüssli
-
Dravere schrieb:
Also wenn schon überhaupt, dann std::deque, da es std::vector und std::list vereinigt.
Grüssli
Wie kommst Du denn zu der irrigen Annahme?
-
Tachyon schrieb:
Wie kommst Du denn zu der irrigen Annahme?
Eine std::deque basiert meiner Erinnerung nach immer noch aus Blöcken, wie eine std::list. Nur enthält ein Block mehrere Elemente. Wenn ein Block nicht mehr benötigt wird, so wird dieser freigegeben, bzw. man kann auch Blöcke im voraus reservieren, was einem sehr an einen std::vector erinnert. Man kann bei einer Deque auch ein Elementzugriff über Indices machen, wie bei einem std::vector. Einfügen, Ahängen usw ist etwas schneller als bei einem std::vector aber etwas langsamer als bei einer std::list. Es ist halt eben ein Zwischending.
-> http://www.cplusplus.com/reference/stl/deque/
Grüssli
-
Dravere schrieb:
Tachyon schrieb:
Wie kommst Du denn zu der irrigen Annahme?
Eine std::deque basiert meiner Erinnerung nach immer noch aus Blöcken, wie eine std::list. Nur enthält ein Block mehrere Elemente. Wenn ein Block nicht mehr benötigt wird, so wird dieser freigegeben, bzw. man kann auch Blöcke im voraus reservieren, was einem sehr an einen std::vector erinnert. Man kann bei einer Deque auch ein Elementzugriff über Indices machen, wie bei einem std::vector. Einfügen, Ahängen usw ist etwas schneller als bei einem std::vector aber etwas langsamer als bei einer std::list. Es ist halt eben ein Zwischending.
-> http://www.cplusplus.com/reference/stl/deque/
Grüssli
Eine deque ist oft ein ganz normaler Vektor mit zusätzlicher Indexverwaltung. Es kann auch eine doppelt verkettete Liste sein. Muss es aber nicht. Garantiert ist, dass man im Gegensatz zum Vektor, auch am Anfang schnell einfügen/löschen kann, und nicht nur am Ende. Wenn Du Elemente mittendrin löscht, kann es genauso "langsam" sein wie bei einem Vektor. Oder auch nicht.

Ich würde mich, wenn es drauf ankommt, jedenfalls nicht drauf verlassen.
-
Tachyon schrieb:
Wenn Du Elemente mittendrin löscht, kann es genauso "langsam" sein wie bei einem Vektor. Oder auch nicht.

Ja, sorry, hatte vergessen zu schreiben "Einfügen am Anfang", war auch das gemeint. Allerdings wenn ich mich recht entsinne, funktioniert auch bei vielen Libs das einfügen und löschen in der Mitte schneller. Aber das wüsste ich jetzt nicht sicher und weiss auch, dass man davon nicht grundsätzlich ausgehen kann.
Tachyon schrieb:
Ich würde mich, wenn es drauf ankommt, jedenfalls nicht drauf verlassen.
Aber std::deque hat durchaus einige Vorteile gegenüber std::vector und kommt etwas näher an eine std::list. Wenn man einen Default-Container bräuchte, dann wäre meiner Meinung nach eben std::deque die richtige Wahl. Weil es eben ein gewisses Zwischending ist. Vielleicht etwas mehr in die Richtung std::vector, aber trotzdem.
Und irrig ist meine Annahme insofern nicht
Grüssli
-
Tachyon schrieb:
Eine deque ist oft ein ganz normaler Vektor mit zusätzlicher Indexverwaltung.
Und wie vermeidest du dann Reallokationen? Ein deque kann nicht auf einem vector basieren: einerseits werden Objekte höchstens beim Einfügen oder Löschen in der Mitte verschoben, andererseits kann man ja nicht im Voraus sicher genug Speicher reservieren (zumal deque gerade nicht über capacity/reserve verfügt).
-
camper schrieb:
Tachyon schrieb:
Eine deque ist oft ein ganz normaler Vektor mit zusätzlicher Indexverwaltung.
Und wie vermeidest du dann Reallokationen? Ein deque kann nicht auf einem vector basieren: einerseits werden Objekte höchstens beim Einfügen oder Löschen in der Mitte verschoben, andererseits kann man ja nicht im Voraus sicher genug Speicher reservieren (zumal deque gerade nicht über capacity/reserve verfügt).
Indem die die Indizes in der Indextabelle geschickt umbiegst. Du gehst dabei über eine Lookuptabelle in den Vektor rein.
-
Dravere schrieb:
bladerunner10 schrieb:
Geht't konkreter?
Ein überflüssiges ';' ist IMHO keine Glaubensfrage.Wieso? Es ist überflüssig, der Compiler ignoriert es einfach. Dann kann man es hinsetzen oder nicht, das stört doch niemand. Es ist eine reine Stilfrage, ob man es schön findet, dort noch ein Semikolon hinzusetzen oder nicht. Das ist völlig subjektiv und hat nichts mit der Funktionalität des Programms zu tun.
int main () {};$ g++ -pedantic test.cpp test.cpp:1: error: extra ';'Also keine reine Stilfrage.
Dravere schrieb:
Und das 4. finde ich einfach nur witzig. Wieso willst du ihm einen std::vector andrehen? Ich sehe im Gegenteil immer viel zu viele Leute, welche einen std::vector benutzen und dabei besser mit einer std::list oder std::deque bedient wären. Aber das ist ja an sich schon eine witzige Frage. Willst du bei jedem die Frage stellen, welcher eine std::list benutzt?

Im Normalfall ist std::vector für so ziemlich alles geeignet, was kein
push_frontbraucht (und das braucht man wirklich lächerlich selten) und auch der am besten optimierte Container.
-
Tachyon schrieb:
camper schrieb:
Tachyon schrieb:
Eine deque ist oft ein ganz normaler Vektor mit zusätzlicher Indexverwaltung.
Und wie vermeidest du dann Reallokationen? Ein deque kann nicht auf einem vector basieren: einerseits werden Objekte höchstens beim Einfügen oder Löschen in der Mitte verschoben, andererseits kann man ja nicht im Voraus sicher genug Speicher reservieren (zumal deque gerade nicht über capacity/reserve verfügt).
Indem die die Indizes in der Indextabelle geschickt umbiegst. Du gehst dabei über eine Lookuptabelle in den Vektor rein.
Du hast die Frage nicht verstanden. Wie gehst du mit dem Fall um, dass dein Vektor voll ist, und du ein zusätzliches Element einfügst (egal wo)? Ein Vektor muss in diesem Fall reallokieren, ein deque darf es nicht.
-
camper schrieb:
...ein deque darf es nicht.
Wo steht das?
-
Tachyon schrieb:
camper schrieb:
...ein deque darf es nicht.
Wo steht das?
Im Standard (23.2.1.3). Insert am Anfang und am Ende hat immer konstante Komplexität (nicht bloß amortisiert) und bewirkt einen einzelnen Aufruf des Copyctors. Im schlimmsten Falle ist die Komplexität für das Einfügen in der Mitte linear bzgl. des Minimums der Distanz der Einfügestelle von beiden Enden des Containers. Das Einfügen an einem Ende invalidiert alle Iteratoren aber keine Referenzen oder Zeiger auf Elemente.
-
Boing!
