vector zerstören



  • template<typename Ty>
    void deleter(Ty* obj) { delete obj; }
    
    std::for_each( vec.begin(), vec.end(), deleter<wasauchimmerimvectordrinist>() );
    

    Ich denke das wäre die allgemeingültige Variante. Aber ich glaube boost hat genau so einen deleter sogar an Bord.



  • ConfusedGuy schrieb:

    äähhm, es handelt sich um einen vector und nicht um einen c array

    oder ist das schnuppe?

    Am Rande: Ein "C-Array" ist durchaus auch ein Vektor und kann auch so bezeichnet werden! 🙂



  • aja, ich dachte immer ein vector wäre auch ein array und nicht umgekehrt...schließlich kann der vector ja mehr als der array bzw. kann auch das was ein array kann.
    andersherum gilt das ja nicht
    ergo ist ein vector ein array und ein array kein vector

    zumindest lernt man das in logik :p



  • m Rande: Ein "C-Array" ist durchaus auch ein Vektor und kann auch so bezeichnet werden! 🙂

    Nich wirklich. Also bitte, es macht keinen Sinn die Bezeichnung einer dynamische Datenstruktur für eine statische Datenstruktur zu benutzen.

    Wenn man sagt ein vector ist auch ein Array, ok vielleicht gerade noch...
    Der UpCast ok, aber nich andersrum...



  • @ConfusedGuy
    Lass dich nicht (noch weiter 😃 ) verwirren. Du hast völig recht...



  • nirsaja schrieb:

    m Rande: Ein "C-Array" ist durchaus auch ein Vektor und kann auch so bezeichnet werden! 🙂

    Nich wirklich. Also bitte, es macht keinen Sinn die Bezeichnung einer dynamische Datenstruktur für eine statische Datenstruktur zu benutzen.

    Wenn man sagt ein vector ist auch ein Array, ok vielleicht gerade noch...
    Der UpCast ok, aber nich andersrum...

    Man bist du voreingenommen von irgendwelchen Namensgebungen. Ein Vektor ist im Grunde nichts anderes (grob gesagt) als eine Ansammlung von n-Elementen. Das trifft sowohl auf die Klasse Vektor der STL als auch auf ein C-Array zu. Daher ist es nicht Falsch den Begriff Vektor auf ein C-Array anzuwenden.
    Der Begriff Vektor wird ja auch in der Mathematik angewendet, Beispielsweise bei 3D Berechnungen wird viel mit Vektoren gearbeitet, wobei hier genausowenig von der Klasse Vector (STL) die rede ist wie auch wenn ich ein C-Array einen Vektor nenne, was vollkommen korrekt ist.

    Scott Meyers z.B. verwendet in seinem Buch den Begriff Vektor ebenfalls statt "C-Array".
    grüße



  • Der Containerbegriff Vector hat nichts mit dem mathematischem Vektor zu tun. Was soll der Vergleich?

    Und nein, ein Array und Vector sind zwei verschiedene paar Schuhe. Der Vector ist nur rein zufällig mit einem Array implementiert, um die Performancevorgaben aus dem ISO-Standard zu erfüllen (da steht nur drin, das der Vector konstante Zugriffszeiten bieten muß, von Array steht da nichts). Der Vector könnte auch mit einer verketteten Liste implementiert werden, würde diese die Performancevorgaben erfüllen.

    Was würdest du sagen, wäre z.B. im MS-Compiler der Vector mit einer verketteten Liste implementiert? Wäre ein Array für dich immer noch ein Vector? Sicherlich nicht. Und schon haben wir den Grund, warum Vector != Array ist.

    Du sagst ja auch nicht zu einer Rose Baum, oder? Nur weil reinzufällig beide einen Stiel, Blätter und eine Krone haben? Du sagst auch ein nicht zu einer kleinen Jolle (ein Zweimann-Segelboot) auch nicht Schiff, es ist ein Boot!

    Also, sag zum Array auch nur Array und zum Vector auch nur Vector! Unsere Welt hat feste bestimmte Begriffe, damit wir unmissverständlich kommunizieren können.



  • Hi!

    Ein Array kann als Vektor bezeichnet werden, ganz einfach weil der begriff Vektor nicht für die Klasse Vektor (STL) reserviert wurde. Auch ist die Implementierung von eines Vektors ganz egal und was die Klasse kann ebenfalls. Es geht darum das ein Vektor aus n-Elementen besteht, genau wie aus der Mathematik bekannt daher der Vergleich.
    Aus Gründen des Verständnisses ist es natürlich besser ein Array ein Array zu nennen und die STL Klasse Vector einen Vektor.
    Aber: Ein Array repräsentiert durchaus einen Vektor und kann auch so genannt werden, was kein Fehler darstellt.
    Hier verweise ich nochmal auf Scott Meyers Buch "Effectiv C++ Programmieren" wo Arrays als Vektoren bezeichnet werden.

    grüße



  • Und nochmal: Vector im Sinne eines Containers, hat nichts mit dem mathematischen Vektor zu tun. Du willst mir haargenau das gegenteil beweisen. Ich sage dir nur, das laut Bjarne Stroustrup der Begriff Vektor nichts mit dem mathematischen Vektor zu tu hat. Deshalb hinkt dein Vergleich. Ich werde zu Hause (heute abend) nochmal die Stelle aus seinem Buch raussuchen und hier zitieren.

    Und Scott Mayers hat in dem Fall einfach unrecht! Nur weil er es in seinem Buch schreibt, muß das auch noch lange nicht richtig sein. Schliesslich sagt er auch selber von sich, das er die STL nicht verstanden hat. (ok, heute bestimmt schon, aber damals als er Effektiv C++ schrieb, jedenfalls nicht) Und in dem Fall vertraue ich eher Bjarne Stroustrup (der Programmierer ist) als einem Scott Mayers (der eher Consultant und nicht Programmierer ist).



  • Das ist alle schön und gut und du magst auch teilweise recht haben. Allerdings ist der Begriff Vektor nicht festgelegt für diese eine Klasse. Arrays gibt es in den verschiedensten Sprachen und ich habe den Begriff Vektor im zusammenhang damit schon oft fallen gehört. Von der Definition her ist ein Array also genauso ein Vektor wie auch die Klasse Vector einer ist.
    Um einen sprachlichen Unterschied zu erkennen sollte man trotzallem Array sagen, allerdings ist die Bezeichnung Vektor nicht falsch.

    grüße



  • oh mein gott was habe ich getan? Habe ich nun eine Grundsatzdiskussion gestartet?` 😉

    Nein, mal im Ernst...

    Unsere Welt hat feste bestimmte Begriffe, damit wir unmissverständlich kommunizieren können.

    Sagt in meinen Augen alles aus was man wissen muss.

    Wenn ich von einem Array spreche meine ich IMMER einen c-array und wenn ich von einem Vektor spreche meine ich IMMER einen stl vektor.

    Das macht das ganze eindeutig und unmissverständlich. Wenn ich nun Anfange Arrays und Vektoren zu vermischen können missverständnisse auftreten. Das sollte jedem einleuchten.

    Gruß



  • Endlich! Einer hats kappiert! 😃 👍



  • Hi!

    @ConfusedGuy: Genau das meine ich doch auch. Alles was ich sagen will ist, das die Bezeichnung Vektor für ein C-Array zwar für Verwirrung sorgt und daher nicht verwendet werden sollte, aber trozdem nicht falsch ist... 🙂

    @Artchi: 🙄

    grüße



  • das die Bezeichnung Vektor für ein C-Array zwar für Verwirrung sorgt

    Was hier fuer verwirrung sorgt, sind Disskussionen wie diese !

    In C++ hat es sich im Laufe der zeit nun mal eingebuergert, das man bei nem Array von nem C-Array spricht, egal ob statisch oder dynamisch angelegt, waehrend man bei vector map set list von einer Klassenimplementation ausgeht, die gewisse Funktionalitaeten und schnittstellen bietet ! Angelehnt an die Implementation schlechthin unter C++, der STL.

    Und haette Stoustroup seinen stl::vector dann std::class_implementation_of_a_dynamic_c_array genannt wuerden wir jetzt von nem class_implementation_of_a_dynamic_c_array sprechen.
    Und man wuerde alle C++ Programmierer in der freien Wildbahn an dem Knoten in der Zunge erkennen.

    Wenn sich Chemiker unterhalten hat das Wort Wasser sicher ne leicht andere Bedeutung wie wenn sich 2 Koeche unnerhalten.

    Auch wenn es mathematisch gesehen korrekt ist, aber sind wir hier in nem mathematik forum ? neee da steht gross c++ drueber, also sollte man sich hier schon der in c++ ueblichen mathematisch unkorrekten Bezeichnungen bedienen duerfen ....

    Ciao ...



  • Ich will jetzt die Diskussion nicht wieder anheizen,
    aber der Vergleich mit dem Wasser hinkt.
    Den Wasser ist für Chemiker wie für Köche ein flüssiges Lösungsmittel.
    Darin kann man zum Beispiel Salze auflösen..

    Genau so ist ein Vektor in Mahte und Informatik ein Behälter für n-Elemente gleicher Art. Daher "könnte" man ein Array auch Vektor nennen.
    Sinn macht es natürlcih nicht.



  • Der Begriff Vektor wird in verschiedenen Bereichen verwendet und hat dem entsprechend verschiedene Bedeutungen. Auch wenn Vektor aus dem lateinischen kommt und Träger bedeutet, ist die Bedeutung in den einzelnen Bereichen jeweils so konkretisiert, dass Querkonkretisierungen im Normalfall nicht möglich sind. Der Vektor in der Mathematik ist also auch nur eine Konkretisierung und keinesfalls die Mutter aller Vektoren. In der Genetik zum Beispiel dient ein Vektor als Transportvehikel zur Übertragung einer Fremd-Nukleinsäure.

    Die STL meint mit Vektor einen skalierbaren und sich automatisch skalierenden Container mit, wie Artchi schon sagte, bestimmten Zugriffsvoraussetzungen (Random Access). Ich finde, man sollte in diesem Forum (Standard C++) explizit dazu sagen, wenn man von einem Vektor spricht und gar nicht den std::vector meint.


Anmelden zum Antworten