Array Größe ?
-
das Problem ist(war), daß ich dieses Array in einer eigenen Klasse ( eigenen Header Datei) deklariert habe und einfach nicht so viele public Variablen benutzen will. Array deswegen, da es einfach schneller ist als vector.
Nun benutze ich vector und der Unterschied ist nur minimal bis gar nicht zu spüren wenn das array größer ist.
aber trotzdem vielen dank für die Antworten.
-
OldMan00 schrieb:
Array deswegen, da es einfach schneller ist als vector.
Bei was ist Array den schneller als std::vector?
-
Array deswegen, da es einfach schneller ist als vector.
Falsch, -100 Punkte.
-
vielleicht einfach mal testen

Die nächste Tabelle enthält die Laufzeiten für diese Anweisungen mit einem Array
und einem Vektor. In der Spalte mit „vector at“ wurde auf die Elemente des
Vektors mit at zugegriffen:
C++Builder 2007, Release Build
Auswahlsort n=10000Array.....vector [].....vector at
0,09 Sek..0,56 Sek......6,42 Sek.auch nachzulesen in:
C++ mit dem Borland C++Builder 2007
-
zeig mal den code dazu, oder gibts da keinen?
-
int max=10000; vector<int> a(Max); for (int i=0; i<=Max–2; i++) { int x,Min = i; for (int j=i+1; j<=Max–1; j++) if (a[j]<a[Min]) Min = j; x = a[i]; a[i] = a[Min]; a[Min] = x; }
-
lässt sich nicht kompilieren

-
Bei den Fragen die du stellst, wird der Geschwindigkeitsunterschied natürlich das wichtigste an deinem Programm sein.
-
dan füg halt noch das array ein, ergibt sich doch oder, habe es nur schnell aus der pdf file kopier. int a[Max];
ja die Geschwindigkeit ist wichtig, da es was mit bewegten Grafiken zu tun hat und noch einiges dazu kommt, so 'ringe' ich schon um das schnellste Verfahren.
aber ich habe jetzt vector genommen wie schon erwähnt und ich glaube nicht, daß wir jetzt noch das Forum mit unnötigen Beiträgen belasten sollten. Andere wollen bestimmt auch noch einen Überblick zu Thema behalten.
Meine Frage wurde beantwortet, es geht nicht so wie ich es wollte, so bin ich zu vector gegangen und es funktioniert auch.
danke nochmals an alle 'Antworter'
-
vector verwendet intern normalerweise ein (dynamisches) array. die zugriffsfunktionen werden inline gemacht, am ende erzeugt der compiler also nicht viel unterschiedlichen code. natürlich kannst du als benutzer, wenn du nichts über die interna (d)eines vectors weißt, ziemlich viel verlangsamen.
den vergleich zu
int a[Max](ohne new, nicht dynamisch) dürfte man übrigens nicht mit vector machen, sondern mitstd::tr1::arraybzw.boost::arraymachen.nachdem ich mir kurz einen vergleich angetan habe zwischen einem dynamischen array und einem vector (mit dem code, den du gepostet hast), komme ich mit gcc 4.2.2 und -O3 auf folgendes ergebnis:
bash-3.2$ time -p ./test_vector_O3
real 0.17
user 0.12
sys 0.00
bash-3.2$ time -p ./test_array_O3
real 0.12
user 0.07
sys 0.00
bash-3.2$ time -p ./test_dynarray_O3
real 0.24
user 0.18
sys 0.00
bash-3.2$mit -O0 allerdings:
bash-3.2$ time -p ./test_vector_O0
real 1.03
user 0.75
sys 0.00
bash-3.2$ time -p ./test_array_O0
real 0.48
user 0.37
sys 0.00
bash-3.2$ time -p ./test_dynarray_O0
real 0.73
user 0.48
sys 0.00
bash-3.2$interessanterweise stellt sich die reihenfolge bei -O1 nochmals um:
bash-3.2$ time -p ./test_vector_O1
real 0.20
user 0.16
sys 0.00
bash-3.2$ time -p ./test_array_O1
real 0.26
user 0.20
sys 0.00
bash-3.2$ time -p ./test_dynarray_O1
real 0.22
user 0.18
sys 0.00
bash-3.2$hier ist also vector am schnellsten, das dynamische array an zweiter stelle und das array an letzter.
jeweils +/- bis zu 0.02 bei user time.
soviel zur aussagekräftigkeit dieses vergleichs
