ich arbeite an einer zeitkritischen anwendung und brauche einen container der maximum speed im zugriff bietet.
Ich verwende ihn so: * Ich habe ein array welches mit pointern gefüllt wird die jeweils auf eine stelle im zweiten array zeigen. * das zweite array trägt also die daten. * die grösse steht schon von vornherein fest * der container wird von anfang bis ende nacheinander gefüllt. also die füllung ist nicht irgendwie random * nach der füllung wird der zugriff zum auslesen der daten über das pointer array geschehen und dann ab diesem pointer sequentiell nacheinander. Also im grunde auch nacheinander. (Bsp: arr1[1][0-5] zum auslesen der 0-5 elemente auf die pointer 1 zeigt die sich z.B auf den positionen 6-11 im arr2 befinden)
ich suche nun den idealen container in dem sowohl "normale" double werte als auch strukturen verwendet werden sollen....
Evtl. ist ja std::vector schon das ideale? Interessant wären da auch die detaillierten konstanten vor dem konstanten/linearen zugriff....nur finde ich keine tabellen...
Also so wie du das beschreibst frage ich mich wofür du einen Kontainer benutzen möchtest? Ohne wärst du doch da viel besser dran vorallem wenn es zeitkritisch sein soll...
ich muss abhängig vom input mein array mit entweder double werten füllen, oder mit einer ganzen struktur - das entscheidet sich aber erst zur laufzeit. Nun habe ich gedacht ich mache das so:
ich schaue was ich für einen input habe und fülle dann meine datenstruktur die als template vorliegt. Und ich glaube nicht dass ich meine eigene template struktur schneller basteln kann als die stl.
C++:
class My_Class { public: std::vector<T*> arr; std::vector<T> arr; };
ich will den vector erst zur laufzeit mit dem erforderlichen datentyp füllen - es kann also sein dass er mit double werten gefüllt wird oder z.B mit einer struktur....
Das macht aber doch keinen Unterschied. Dein Template kann doch auch einfach zwei Arrys des Typs erhalten statt dem Container mit dem Typ.
Was meinst du mit zeitkritisch im ersten Post? Ich habe es als Laufzeitkritsch aufgefasst, aber nach deinem 2. Post habe ich den Verdacht das du Design-Zeitkritisch meinst?Dieser Post wurde am 15.08.2007 um 17:05 Uhr von Guybrush Threepwood editiert.
alles was ich habe ist eine klasse (siehe oben) die im moment unter anderem das hier trägt:
C++:
double **arr1; double *arr2;
und ich wollte dieser klasse nun eine datenstruktur verpassen die vom typ her erst zur laufzeit gefüllt wird....also wenn mein typ beim input z.B double ist -> dann initialisiere z.B std::vector<double>, wenn mein typ z.B my_structure ist dann initialisiere std::vector<my_structure>
aber das kann doch gar nicht funktionieren weil templates ja zur compilezeit festgelegt werden oder?
mit zeitkritisch meinte ich schon von der zeit her die mein programm zum ablauf braucht. nur weiß ich im moment nicht wie ich das mit dem design hinbekommen kann dass es auch performant bleibt....
ich weiß dass ich nur den typ double oder my_struct als input bekommen kann. ich switche deshalb über if-else und wollte jetzt abhängig von diesem input entweder das arr mit double oder my_struct initialisieren und füllen.
So müsste es doch gehen - nur bekomme ich mit der variante:
C++:
class My_Class { std::vector<T*> arr1; std::vector<T> arr2; };
C++:
folgende meldung: »T« wurde in diesem Gültigkeitsbereich nicht definiert 13: Fehler: Templateargument 1 ist ungültig 13: Fehler: Templateargument 2 ist ungültig
Dafür musst du natürlich auch ein Template erstellen welches dann den Typen bei der initialisierung übergeben bekommt.Dieser Post wurde am 15.08.2007 um 17:29 Uhr von Guybrush Threepwood editiert.
/// The columns and rows of the submatrix Lines *c_lines; };
C++:
class Lines {
public:
// viele member variablen....
double **arr;
double *arr_buf; };
C++:
int main(...) { Matrix *m;
//einige berechnungen und das einlesen des inputs if( input_ist_double) m->c_lines->arr = newdouble[...]; else//input ist z.B my_struct m->c_lines->arr = new my_struct[...];
//Ab hier wird nur noch mit einer initialisierten variante weitergerechnet //also entweder double oder my_struct }
und jetzt wollte ich halt die c_lines auch mit my_struct füllen lassen können - dazu wollte ich die klasse Lines und Matrix irgendwie anpassen so dass ein template möglich ist.....