Array ohne Konstante als Dimension?
-
unskilled schrieb:
zum beispiel:
std::vector array1; std::valarray array2; T *array3 = new variable[length];2 und 3 sind statisch, 1 variable
1 und 2 sind cpp, 3 eher Cbb
Also ich suche etwas in C++, sonst hätte ich nicht in diesem Forum gepostet

Und bei einem Vector kann man ja einfach push_back() zum Bespiel machen, also hat es keine Konstante Dimension.std::valarray habe ich gerade zum ersten Mal gehört und wie es scheint gibt es bei std::valarray eine Methode resize().
Also ich suche wirklich etwas mit einer strikt, konstanten Dimension.
-
lol?
Threadtitel: "Array ohne Konstante als Dimension?"
aber zu gleich auch suchst du auch "etwas mit einer strikt, konstanten Dimension."?wie soll das gehen?
-
Also ich meine, dass man, wie bei einem Vector, beim Konstruktor, bei der Dimension, keine Konstanten angeben muss.
Aber die Dimension soll hinterher nicht mehr veränderbar sein, also sodass man beim Konstruktor eine Dimension angeben MUSS.Und die Sache wegen dem Titel... da habe ich wohl nur die Hälfte hingeschrieben

-
was spricht dann gegen ein
T static_array[X];?
-
boost::arrayoderstd::tr1::array(wenn vorhanden).
-
unskilled schrieb:
was spricht dann gegen ein
T static_array[X];?
Vielleicht die Dimension, die konstant sein muss? Ausserdem sind rohe Arrays generell unsicher und unkonfortabel (denke man dabei zum Beispiel an Parameterübergaben).
-
unskilled schrieb:
was spricht dann gegen ein
T static_array[X];?
Das X konstant seien muss.
-
Speedy_92 schrieb:
unskilled schrieb:
was spricht dann gegen ein
T static_array[X];?
Das X konstant seien muss.
huch - hatte ich schon wieder vergessen, bei dem ganzen hin und her... sry
-
@ Speedy_92:
Hast du meinen Hinweis gesehen?
-
Nexus schrieb:
@ Speedy_92:
Hast du meinen Hinweis gesehen?Ja danke, allerdings gibt es std::trl bei mir nicht^^
Aber boost werde ich mir mal anschauen
-
Speedy_92 schrieb:
Ja danke, allerdings gibt es std::trl bei mir nicht^^
Wäre auch
tr1(also eine Eins, nicht TRL).
Aber in einigen Implementationen ist das noch nicht vorhanden...Boost ist sicher nicht schlecht.
-
Nexus schrieb:
Speedy_92 schrieb:
Ja danke, allerdings gibt es std::trl bei mir nicht^^
Wäre auch
tr1(also eine Eins, nicht TRL).
Aber in einigen Implementationen ist das noch nicht vorhanden...Boost ist sicher nicht schlecht.
Also TR*EINS* ist vorhanden

-
Seit wann sind new und delete "eher C" ... ?
Also ich hab die zwei bisher immer in C++ einsortiert, denn malloc und free sind ja eigentlich C...
Bloß weil irgendwas nicht Vector, list oder map ist, heißt es doch nicht gleich, dass es kein C++ ist

-
also ich finde, manchmal übertreibt ihr mit eurem "std::schlagmichtot"-Wahn

-
Was soll das hier eigentlich? Entweder, man nimmt ein statisches Array, da muss die Dimension zur Compilezeit bekannt sein. Das gilt übrigens auch für boost.array.
Wenn man das nicht will, muss man entweder ein dynamisches Array mit new anlegen oder am besten std::vector benutzen. Wenn Du nicht willst, dass man die Dimension anschließend verändern kann, musst Du Dir einen Adapter dafür schreiben.
-
it0101@loggedoff schrieb:
Seit wann sind new und delete "eher C" ... ?
Das hat nichts mit new/delete zu tun, sondern mit Arrays. Die Standardarrays sind C-Relikte die nicht wirklich in das sonstige C++ Umfeld passen:
a) Fehleranfällig
b) Kopieren und Zuweisen ist nicht so ohne weitere möglich
...it0101@loggedoff schrieb:
Bloß weil irgendwas nicht Vector, list oder map ist, heißt es doch nicht gleich, dass es kein C++ ist

...
also ich finde, manchmal übertreibt ihr mit eurem std::schlagmichtot"-WahnModerne C++ Programmierung hat andere Paradigmen als C. Du kannst weiterhin C in C++ programmieren, dies mag zwar auch C++ sein, aber passt häufig nicht zu den Paradigmen wie man heutzutage C++ verwendet. Und es ist meines Erachtens ein Fehler die fehleranfälligen und benutzerunfreundlichen C-Konstrukte zu zeigen, wenn die Standardbibliothek sowie Boost besseres zu bieten hat. Wem std::, boost:: oder std::tr1:: zuviel Schreibaufwand ist, dem ist eh nicht mehr zu helfen (das sind meist diejenigen die auch heute noch kryptische Variablenbezeichnungen verwenden).
Es gibt nicht ohne Grund inzwischen std::tr1::array. Vielleicht solltest du dich lieber mal damit vertraut machen, warum man diese Klasse eingeführt hat, anstatt an C unter C++ festzuhalten. Und es gibt sehr gute Gründe (u.a. Zuweisung...).
cu André
-
it0101@loggedoff schrieb:
also ich finde, manchmal übertreibt ihr mit eurem "std::schlagmichtot"-Wahn

tja. dafür haben die leute mit dem "std::schlagmichtot-Wahn" ihr programm schon fertig, während du noch segfaults suchen gehst und memleaks fixt.