std::vector - wie wurde er erstellt?
-
SideWinder schrieb:
volkard schrieb:
Ungefähr so http://www.workgruppe.de/cpp/this__datei_vectorh.html könnte man es dynamisch hinkriegen. Ist aber nicht exceptionsicher und hat auch kein nettes push_back.
Deutsche Parameternamen sollten generell Punkteabzug bringen

MfG SideWinder
Sprache wäre ja egal, aber mischen geht gar nicht.

-
Merci beaucoup!
Gruß
-
Kóyaánasqatsi schrieb:
Schaue dir mal den std::Allocator an, dann sollte alles etwas deutlicher werden.
Wenn du Scherze machst solltest du wenigstens Smileys dranschreiben, damit man auch ne Chance hat sie als solche zu erkennen.
-
SideWinder schrieb:
Deutsche Parameternamen sollten generell Punkteabzug bringen

Englisch ist mir zwar auch lieber, aber viel schlimmer find ich beides gemischt.
-
@hustbaer
Nanu, wo ist das Smiley...
-
Kein Scherz, daher auch kein Smiley.
Glaubst du dass dem OP damit geholfen ist, wenn du std::allocator (kleines a) erwähnst? Ich glaube nicht.
-
hustbaer schrieb:
Glaubst du dass dem OP damit geholfen ist, wenn du std::allocator (kleines a) erwähnst? Ich glaube nicht.
Doch, ich denke sehr wohl das es ihm hilft. Mir hat es enorm dabei geholfen zu raffen, wie ein std::vector funktioniert.
-
Naja ich kanns mir nicht vorstellen.
So wie ich die ursprüngliche Frage verstehe, geht es dem OP nicht um "Feinheiten" wie dass erstmal "roher" Speicher angefordert wird, und die Elemente da Stück für Stück reinkonstruiert, oder dass man std::vector mit alternativen Allokatoren instanzieren könnte oder etwas in der Art. Bzw. wie das alles geht.
Es fehlt hier schon am grundlegenden
new T[sizeSpecifiedAtRuntime].Und jemand der eine Frage auf dem Niveau stellt, hat IMO sicher nichts davon, wenn man ihm vorschlägt sich mal was zu std::allocator anzusehen.
Falls der OP das anders sieht, möge er mich bitte korrigieren (falls er noch mitliest, was freilich fraglich ist).
-
Falls der OP das anders sieht, möge er mich bitte korrigieren (falls er noch mitliest, was freilich fraglich ist).
Ich lese immer mit

Es fehlt hier schon am grundlegenden
new T[sizeSpecifiedAtRuntime].Eigentlich nicht, jedenfalls dachte ich das immer... wie soll denn
new Tfunktionieren, wennTzum Beispielint*ist?
Dann wäre die Compileraktion dochnew int*[x], und das geht doch sicherlich nicht. Deshalb auch die Frage, da ich nicht damit gerechnet habe, dass es doch so "simpel" ist.wenn man ihm vorschlägt sich mal was zu
std::allocatoranzusehen.Das stimmt wohl. Zwar lerne ich auch gerne an praktischen Beispielen, bei sowas sollte man aber (auch meiner Erfahrung nach) lieber nachfragen, denn es ist besser, es sich gleich richtig einzuprägen, anstatt den Code in einer (für mich sehr unübersichtlichen) Bibliothek falsch zu interpretieren.
Edit: Ach ja, @ hustbaer: Wenn du Lust hast, würde ich mich freuen wenn du mir noch einmal helfen könntest. Du hast mir damals auf eine Frage zum Pluginsystem geantwortet und scheintest dich ganz gut damit auszukennen. Siehe http://www.c-plusplus.net/forum/viewtopic-var-t-is-264751.html (bitte nicht so auffassen als ob ich jetzt eine Antwort erwarte - ich weiß, dass das hier alles freiwillig ist ;))
Gruß und Danke.
-
theliquidwave schrieb:
Es fehlt hier schon am grundlegenden
new T[sizeSpecifiedAtRuntime].Eigentlich nicht, jedenfalls dachte ich das immer... wie soll denn
new Tfunktionieren, wennTzum Beispielint*ist?Genauso wie in jedem anderen Fall. Ob du nun ein Array von Integern oder ein Array von Integerzeigern hast, ist ziemlich egal.
-
asc schrieb:
theliquidwave schrieb:
Es fehlt hier schon am grundlegenden
new T[sizeSpecifiedAtRuntime].Eigentlich nicht, jedenfalls dachte ich das immer... wie soll denn
new Tfunktionieren, wennTzum Beispielint*ist?Genauso wie in jedem anderen Fall. Ob du nun ein Array von Integern oder ein Array von Integerzeigern hast, ist ziemlich egal.
Genau. Viele machen den Fehler, dass sie Zeiger irgendwie als keine richtigen Typen anerkennen und immer Spezialfälle erwarten.
Am besten macht man einfach mal das hier:
typedef int* int_pointer; int_pointer a;Man stellt sich da einfach mal dumm und stellt sich am besten gar nichts mit Sternchen vor, sondern, dass das einfach eine Klasse ist, wo man halt ein paar Operationen drauf ausführen kann, wie -> oder *.
Lediglich auf die Invarianz muss geachtet werden (von wegen 0 Pointer und so) und darf die Operationen nicht immer drauf anwenden. Ansonsten verhält sich int_pointer genau gleich, wie andere Typen auch.
-
Hi.
Ok
Mal ne Frage... In dem Beispiel: http://www.workgruppe.de/cpp/this__datei_vectorh.html
Ganz unten stehtdelete m_data;- das ist doch ein Memory Leak oder nicht? Weil der Kram mitnew[]angelegt wird. Oder habe ich was falsch verstanden?Gruß
-
theliquidwave schrieb:
Ganz unten steht
delete m_data;- das ist doch ein Memory Leak oder nicht? Weil der Kram mitnew[]angelegt wird.Schlimmer noch, das ist undefiniertes Verhalten. Man muss immer die entsprechenden Speicheranforderungs- und Freigabeoperatoren verwenden. Also
newmitdeleteundnew[]mitdelete[]zusammen.