Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » welcher stl container?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
15.08.2007, 16:37 Uhr
~testo
Gast


Hallo,

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...

danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.08.2007, 16:49 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


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...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.08.2007, 17:00 Uhr
~testo
Gast


guter punkt ja.

Das problem ist:

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....

geht das überhaupt?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.08.2007, 17:04 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.08.2007, 17:10 Uhr
~testo
Gast


jetzt bin ich verwirrt leider...

ich habe ja kein template.

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....

danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.08.2007, 17:15 Uhr
~testo
Gast


also ich hab mich noch nicht genauer ausgedrückt:

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

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
15.08.2007, 17:29 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
15.08.2007, 17:32 Uhr
~testo
Gast


dann habe ich ja alles doppelt oder?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
15.08.2007, 17:56 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Was meinst du?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
15.08.2007, 18:18 Uhr
~testo
Gast


ok vielleihct noch genauer zu meinen klassen:


C++:
class Matrix
{

    public:


        //viele member variablen.....etc...

        /// Number of columns/rowd
        int n;                    

        /// 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 = new double[...];
    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.....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: