operator= bei Klassenvariable vom Typ <vector>
-
Arrrgggh! Dank, Danke, Danke! Wie kann man so blind sein?
Jetzt funzt es und ich kann daran gehen, den Code aufzuhübschen ...
-
So, und jetzt gibt es keine "3" mehr im Code, sondern eine static const int-Variable namens "Lenght". Und ein paar Assertions werde ich auch einbauen - soviel Zeit, wie mich das gekostet hat! Aus Schaden wird man klug ...
-
Wenn du eine fixe Länge hast, solltest du vielleicht nicht
std::vectornehmen. Entweder ein rohes Array oderstd::tr1::array. Dann kannst du dir den Overhead der dynamischen Speicherverwaltung sparen und arbeitest direkt auf dem Stack.std::tr1::arrayhat den Vorteil, dass es voll mit Assertions durchzogen ist und man auch im Release-Modus Bereichsüberschreitungen durch die Memberfunktionat()als geworfene Exception erkennen kann.
-
Oder vielleicht gleich ein:
double xcoord; double ycoord; double zcoord;Grüssli

-
Dravere schrieb:
Oder vielleicht gleich ein:
double xcoord; double ycoord; double zcoord;Grüssli

Ja, wenn man nur einen 3D-Vektor braucht, wäre das in der Tat auch eine Möglichkeit.

Ich habe jedoch das Gefühl, dass CMB auch irgendwo per Index zugreift (aus welchem Grund auch immer). Und mit einem Array(-Wrapper) ist man flexibler, besonders wenn man das Ganze später mal zu Templates ausbaut.

-
Dravere schrieb:
Oder vielleicht gleich ein:
double xcoord; double ycoord; double zcoord;Na ja, ein struct mit diesem Inhalt wäre sicher sehr effizient - habe ich mal bei einem Stück C-Code mit Pythonwrapper gemacht, aber std::valarray habe ich überhaupt nicht zum Laufen gebracht. Und in der Tat, Nexus hat recht mit seiner /ihrer Vermutung: Die Klasse soll ja nicht auf ewig so standalone bleiben ;-).
edit: PS: tr1 kann ich nicht nutzen. Das Projekt, wo der Code irgendwann rein soll, kennt tr1 nicht. (Leider)
-
CMB schrieb:
edit: PS: tr1 kann ich nicht nutzen. Das Projekt, wo der Code irgendwann rein soll, kennt tr1 nicht. (Leider)
dann nimm boost::array
-
CMB schrieb:
Na ja, ein struct mit diesem Inhalt wäre sicher sehr effizient - habe ich mal bei einem Stück C-Code mit Pythonwrapper gemacht, aber std::valarray habe ich überhaupt nicht zum Laufen gebracht.
std::valarrayist ein mathematisches Array, da sind fast alle Operatoren und einige<cmath>-Funktionen überladen. Ich weiss nicht, ob du das brauchst, ansonsten verhält es sich ähnlich zustd::vector.CMB schrieb:
edit: PS: tr1 kann ich nicht nutzen. Das Projekt, wo der Code irgendwann rein soll, kennt tr1 nicht. (Leider)
Boost dann wahrscheinlich auch nicht, oder? Denn
std::tr1::arrayist eigentlich das Gleiche wieboost::array(es wurde von dort in den Standard aufgenommen).
-
Nexus schrieb:
CMB schrieb:
edit: PS: tr1 kann ich nicht nutzen. Das Projekt, wo der Code irgendwann rein soll, kennt tr1 nicht. (Leider)
Boost dann wahrscheinlich auch nicht, oder? Denn
std::tr1::arrayist eigentlich das Gleiche wieboost::array(es wurde von dort in den Standard aufgenommen).Nein
boostauch nicht. Aber ich fange trotzdem an, mich inboosteinzuarbeiten. Und ich frage mal nach, ob es nicht vielleicht doch geht - schließlich, warum sich das Leben schwer machen?Nochmals Danke für all eure Tipps,
Christian
-
notfalls selber schreiben. array ist ja recht trivial.
ich verwende schon garkeine echten arrays mehr - immer nur gekapselt - ist praktisch.tut boost::array überhaupt assert verwenden? früher haben die noch nicht gecheckt wofür man assert verwendet - hat sich das geändert?
-
Shade Of Mine schrieb:
notfalls selber schreiben. array ist ja recht trivial.
ich verwende schon garkeine echten arrays mehr - immer nur gekapselt - ist praktisch.Geht mir gleich.
Shade Of Mine schrieb:
tut boost::array überhaupt assert verwenden? früher haben die noch nicht gecheckt wofür man assert verwendet - hat sich das geändert?
Bei Boost bin ich mir nicht sicher, aber die TR1-Version hat bei mir (MSVC++ 2008) zumindest überall Asserts drin, also ähnlich wie die STL-Container.
Edit: Habs grad getestet, Boost hat auch Assertions, jedoch nicht die "direkten" der IDE, sondern ganz normales
assert(bzw.BOOST_ASSERT-Makro).
-
Shade Of Mine schrieb:
tut boost::array überhaupt assert verwenden? früher haben die noch nicht gecheckt wofür man assert verwendet - hat sich das geändert?
Der
operator[]benutztBOOST_ASSERTundatnatürlich einerangecheckFunktion. Also insofern kann man die Frage wohl mit ja beantworten.(Geprüfte Boost Version: 1.37)
Grüssli
-
perfekt

frühere versionen hatten das nämlich nicht, war ziemlich dämlich weil man sich deshalb immer selbst nachpatchen musste...
-
Shade Of Mine schrieb:
frühere versionen hatten das nämlich nicht, war ziemlich dämlich weil man sich deshalb immer selbst nachpatchen musste...
Da ich das nie erlebt habe, wollte ich kurz nachschauen, seit wann dieses BOOST_ASSERT drin ist. Die Überprüfung ergab:
Version 1.32.0
November 19th, 2004 12:00 GMTIst also inzwischen schon ziemlich lange der Fall. Ich habe Boost mit 1.33 angefangen kennen zu lernen und dort war es eben schon drin

Ich weiss diese Information ist nicht wirklich wichtig, aber falls es mal jemand interessiert und er zufällig darüber stolpert

Grüssli