(Erledigt) Array dynamik (ohne vektor)



  • Nexus schrieb:

    Das liegt mit Sicherheit daran, dass du dich noch nicht gross auskennst. Hast du die STL einmal richtig studiert und weisst du, wie mächtig sie sein kann?

    Nein.

    Nexus schrieb:

    Du sagst, du hast die Container selbst geschrieben. Wirklich?

    Jo klar, nen kleienr Container ist ja auch nicht der riesen aufwand, das weiste ja sicher selbst.

    Nexus schrieb:

    Hast du auch Iteratoren und Kompatibilität zur STL (und deren Algorithmen) bereitgestellt?

    Nein.

    Nexus schrieb:

    Kennst du das Iterator-Prinzip überhaupt? Das ist nämlich nicht immer ganz trivial.

    Nein.

    Nexus schrieb:

    Und die Security-Checks und Assertions im Debug-Modus hast du bestimmt auch nicht.

    Richtig, wobei ich hier anmerken muß das die meisten container Teil eienr Klasse waren die ihn für ihre Zwecke genutzt hat und durch die Klasse ein korrekter zugriff garantiert war.

    Nexus schrieb:

    Die kann man nicht so schnell, schnell nachbauen.

    Naja ich habe zB nichtd avon geredet ihn bis ins detail anchzubauen sondern schon soweit das es dem grundprinziep eines Containers entspricht.



  • Nun gut. Wie gesagt, ich konnte mir anfänglich auch nicht vorstellen, dass meine eigenen Container nicht mehr gut genug seien. Und Iteratoren? Wozu braucht man das? Mein Index-Zugriff in meinem dynamischen Array reicht mir. Verkettete Listen sind sowieso nichts für mich. :p

    Inzwischen könnte ich mir gar nicht mehr vorstellen, meine Projekte ganz ohne STL zu entwickeln. Falls du wirklich effizient programmieren willst, rate ich dir, die STL mit all ihren Möglichkeiten einmal in Ruhe anzuschauen. Du wirst begeistert sein. Besonders im Zusammenhang mit Algorithmen, Templates und funktionaler Programmierung ist ein Erstaunen gut möglich. 😉

    Xebov schrieb:

    Richtig, wobei ich hier anmerken muß das die meisten container Teil eienr Klasse waren die ihn für ihre Zwecke genutzt hat und durch die Klasse ein korrekter zugriff garantiert war.

    "Garantiert" ist schnell gesagt. In der Praxis sieht es aber oft so aus, dass nicht alles 100% korrekter Code ist. Flüchtigkeitsfehler passieren immer. Wenn die Standardbibliothek einen beim Debuggen noch zusätzlich unterstützt, sollte man diese Möglichkeit auch nutzen. Denn wer sagt, dass in deinem Code nicht irgendwo ein Fehler steckt, der sich erst nach einigen Wochen bemerkbar macht, und dann noch nach 20 Minuten Programmdurchlauf? Die Fehlersuche gestaltet sich in so einem Fall nämlich besonders lustig. Oder ein kleines Memory Leak, das momentan noch nicht auffällt, aber bei grösseren Datenmengen deinen Computer zum Erliegen bringt?



  • Nexus schrieb:

    Wenn man ernsthaft C++ programmieren will, kommt man nicht darum herum, sich mit Zeigern und manueller Speicherverwaltung auseinander zu setzen. Die STL ist zwar schön und gut und in vielen Fällen hilfreich, aber kein Wundermittel. Ich sage nicht, dass man diese Low-Level-Dinge danach die ganze Zeit anwendet - aber es gibt genügend Fälle, in denen man sie braucht. Und solange man sie nicht verstanden hat, hat man meiner Ansicht nach C++ nicht verstanden.

    richtig. aber das low-level zeug ist alles ziemlich advanced und für einen anfänger überhaupt nicht notwendig. sollte man nicht zuerst mal die grundlagen lernen, bevor man ans eingemachte geht? std::vector ist grundlage, low-level speicherverwaltung ist das eingemachte. anscheinend sehen das viele, auch dozenten, andersrum. völlig falsche herangehensweise imho - so werden die programmierer gleich zu anfang versaut.

    die erfinden dann wie xebov das rad jedesmal neu und machen dabei die immer gleichen fehler, die schon hunderttausende vor ihnen gemacht haben und die einfach nicht auftreten würden, wenn man die vorhandenen mittel kennen und anwenden würde. und sie erkennen es nicht, weil sie ihr vorgehen und ihre ignoranz für richtig halten.



  • kurz&knapp schrieb:

    richtig. aber das low-level zeug ist alles ziemlich advanced und für einen anfänger überhaupt nicht notwendig. sollte man nicht zuerst mal die grundlagen lernen, bevor man ans eingemachte geht? std::vector ist grundlage, low-level speicherverwaltung ist das eingemachte.

    Was heist Grundlegend und eingemacht, wenn ich new und delete nehme und damit dynamische Speicherverwaltung betreibe gehört das für mich zur Sprache, wärend sachen wie Container für mich mehr ein extra sind, denn die lassen sich mit hilfe der Grundstrukturend er Sprache ja erstellen. Damit wäre die Speicherverwaltung eine Grundlage für Vectoren, und nicht umgedreht, andersherum sehe ich eher die gefahr das man sich zu sehr an die bordmittel gewöhnt und es am ende nicht richtig hinbekomt weil man es imemr über die bequeme std gemacht in der alles schon schön verpackt drinlag.



  • öhhhm, um mal meine eigenen erfahrungen zu schildern,

    ihr sprecht hier von "grundlagen" und "advanced", und seid euchd abei sehr uneinig
    aber ob std::vector nun advanced ist oder nicht kommt auf die sichtweise an.

    sichtweise 1: Schwirigkeit der Umsetzung
    sichtweise 2: verständnis der Umsetzung

    diejenigen die sichtweise 2 vertreten haben durchaus recht wenn sie behaupten, das der umfang, den so ein vector eigentlich hat, und was eig. passiert wenn man ihn benutzt erst dann wirklich bewusst ist, wenn man das ganze mal manuell mit arrays nachkonstruiert.

    diejenigen die sichtweise 1 vertreten haben allerdings mit ihrem standpunkt auch recht, denn man sollte sich von leicht nach schwer arbeiten, denn wenn man die leichten dnge versteht kann man sich den schweren zuwenden.(übrigens, "schwer" ist relativ)

    meine sichtweise: ich habe das ganze ejtzt nochmal machen dürfen, diesmal mit vectoren und eins ist klar, es ist deutlich leichter, und deutlich angenehmer als die array-wurstelei, und ich glaube nicht,d as ich ohne die vorrangegangene aufgabe das bewusstsein bekommen hätte was da wirklich im hinetrgrund passiert.

    Ich weiß vectoren jetzt wirklich zu schätzen, und das auch nicht grundlos^^

    PS: speicherlecks hatte ich mich zu dem zeitpunkt noch nicht wirklich drum gekümmert, inzwischen wird der speicher richtig freigegeben.



  • Ich weiß nicht, ob bereits darauf hingewiesen wurde. Aber Exceptionsicherheit ist ein weiteres (starkes) Argument für std::Container. Nach dem Wissen von Xebov über Container und Iteratoren zu urteilen, hat er wohl keinen Plan von Exceptionsicherheit. Viele Routinen werden deshalb einfach falsch sein, bzw. nicht mal die kleinste Exceptiongarantie gewährleisten und Speicherleaks verursachen. Exceptionsicherheit kann man oft durch kleine Umstellungen im Code oder "Tricks" wie Copy&Swap erreichen. Dazu muss man aber das Konzept verstanden haben.

    @Xebov: Du kannst das Gegenteil beweisen, indem du mal den operator = deiner Container postest.

    Gruß
    Don06



  • Don06 schrieb:

    @Xebov: Du kannst das Gegenteil beweisen, indem du mal den operator = deiner Container postest.

    nee. er benutzt noch keine exceptions. also brauchen seine container auch nicht exceptionsicher zu sein.


  • Administrator

    volkard schrieb:

    Don06 schrieb:

    @Xebov: Du kannst das Gegenteil beweisen, indem du mal den operator = deiner Container postest.

    nee. er benutzt noch keine exceptions. also brauchen seine container auch nicht exceptionsicher zu sein.

    Tut mir Leid, aber er arbeitet mit Exceptions:
    http://www.c-plusplus.net/forum/viewtopic-var-p-is-1686502.html#1686502

    @Xebov,
    Simple Frage: Wieso verwendest du nicht die Container aus der Standardbibliothek? Was ist dein Grund auf diese zu verzichten? Was verstehst du unter "zu umfangreich", bzw. wo siehst du darin einen Nachteil?

    Ich glaube es ist am einfachsten, wenn wir es an dieser Wurzel anpacken 🙂

    Grüssli



  • volkard schrieb:

    Don06 schrieb:

    @Xebov: Du kannst das Gegenteil beweisen, indem du mal den operator = deiner Container postest.

    nee. er benutzt noch keine exceptions. also brauchen seine container auch nicht exceptionsicher zu sein.

    Ich benutze Exceptions, ua auch um solche operationen abzusichern, allerdings mache ich es an den Stellen wo ich sie zzt verwende nicht über Copy&Swap.

    Wie ich bereits egsagt habe sind die Container zum Teil nicht einzelln sondern gehen in andere Klassen natlos ein dh sie sind ein Teil eienr Klasse und stellen zB eine Verwaltungseinheit dar. Im Falle meiner Vertex/Indexbufefr habe ich das ganze zB so gelöst das ich temporär Variablen benutze, das klingt zwar zunächst nicht sehr praktisch, wenn man sich aber vor augen hält das ich nur Zeiger habe ist es einfacher einen temporären zeiger zu haben der das Objekt hält wärend versucht wird alels zu erweitern als erst über Copy&Swap zu gehen.

    Dravere schrieb:

    @Xebov,
    Simple Frage: Wieso verwendest du nicht die Container aus der Standardbibliothek? Was ist dein Grund auf diese zu verzichten? Was verstehst du unter "zu umfangreich", bzw. wo siehst du darin einen Nachteil?

    Ich glaube es ist am einfachsten, wenn wir es an dieser Wurzel anpacken 🙂

    Ich verwende Sachen meist nur dann wenn ich einen Sinn darin sehe, und genau den sehe ich halt im Falle eines vectors nicht. Ich geb dir ein konkretes Beispiel, weiter oben habe ich ja Vertex/Indexbufefr angesprochen, die halten bei mir eine RAM Kopie auf einem Zeiger bereit. Jetzt ist es für mich genauso leicht einfahc einen Zeige rzu nehmen und Funktionen zum Rein und Rauspacken zu schreiben, die ich ja auch mit einem Vector in gewisser weise als Schnittsteleld er Klasse bräuchte und diese dann auf die Weite zu bearbeiten und verwalten. Mit einem Vector habe ich da weder was gewonenn noch verloren, udn genau das is es halt es macht für mich in den Sachen die ich so geschrieben habe keinen unterschied, da ich zudem ncoh mit Vectoren nie gearbeitet habe ist es für mich einfacher einen relativ gut gesichertesn Kleinen Container in eine Klasse einzulassen als erst groß mit den Vectoren herumzuhantieren.



  • it's used by people who simple do not know C++ (and often not C either). When used by programmers, it typically indicates a "C++ is C with a few useful and a lot of useless complicated features added" attitude. Often, that is the point of view of people who like to write their own strings and hash tables with little knowledge of the standard library beyond printf and memcpy.

    Quelle: http://www.research.att.com/~bs/bs_faq.html#C-slash



  • Xebov schrieb:

    ...

    ich würde vorschlagen, lass uns das thema nochmal angehen, nachdem du "Exceptional C++" gelesen hast.


  • Administrator

    Xebov schrieb:

    Mit einem Vector habe ich da weder was gewonenn noch verloren, udn genau das is es halt es macht für mich in den Sachen die ich so geschrieben habe keinen unterschied, da ich zudem ncoh mit Vectoren nie gearbeitet habe ist es für mich einfacher einen relativ gut gesichertesn Kleinen Container in eine Klasse einzulassen als erst groß mit den Vectoren herumzuhantieren.

    Dann sei mal gesagt, dass du durch einen std::vector VERDAMMT VIEL gewinnen würdest. Nur weil du zu faul bist C++ zu lernen, verzichtest du auf sehr angenehme Dinge der Sprache. Ich empfehle dir DRINGENDS dich mit der Standardbibliothek von C++ auseinander zu setzen!

    Exceptional C++ wurde schon genannt, ansonsten würden wohl bereits die Artikel im Magazin gut tun -> http://magazin.c-plusplus.net/
    Oder halt sonst ein Buch, welches die Standardbibliothek behandelt. Zum Beispiel "Die C++ Programmiersprache".
    Ich kann dir einfach nur wärmstens empfehlen, dass du dich mit dem Bereich auseinander setzt, sonst endet das in der Zukunft fatal.

    Grüssli



  • Dravere schrieb:

    Ich kann dir einfach nur wärmstens empfehlen, dass du dich mit dem Bereich auseinander setzt, sonst endet das in der Zukunft fatal.

    Weltuntergangsstimmung 😃

    Aber ich schau mir immer gern alles an, ich lern ja auch ständig neues dazu wie ich es brauche.



  • Xebov schrieb:

    Weltuntergangsstimmung 😃

    Dravere hat schon Recht. Falls du später mal etwas Grösseres programmierst, womöglich sogar noch kommerziell, wirst du es wahrlich schätzen, eine fehlerfreie, effiziente, exceptionsichere und debug-unterstützende STL zu haben. Aber schon im Moment kann sie dir das Leben enorm erleichtern und eine Menge Ärger ersparen. 😉


Anmelden zum Antworten