vector effizient füllen
-
Hi,
nehmen wir mal an ich habe einen vector, den ich füllen will. Glücklicherweise weiß ich schon, daß ich genau 1000 Elemente reinpacken will :p Wie geht das effinzient?
Möglichkeit 1:
... vector<double> v; for (int i=0; i<1000; ++i) {x = ZufaelligeDoubleZahl(); v.push_back(x); } ...Möglichkeit 2:
... vector<double> v (1000); for (int i=0; i<v.size(); ++i) v[i] = ZufaelligeDoubleZahl(); ...Ich denke ja, Möglichkeit 2 wäre effizienter, weil keine reskalierung des Vektors zu erfolgen hat. Oder ist jemand anderer Meinung?
Gruß gAsT
-
M1 hat das problem, daß beim wachsen ein paar mal alles umkopiert wird.
M2 hat das problem, daß vorher alles genullt wird.
Möglichkeit 3:
... vector<double> v; v.reserve(1000); for (int i=0; i<1000; ++i) {x = ZufaelligeDoubleZahl(); v.push_back(x); } ...
-
hi, ich weiß net, ob das mit dem iterator schneller geht.
vector<double>d(1000); int i=0; for(vector<double>::iterator it=d.begin();it<d.end();++it) (*it)=i++;sonst wüsst ich auch net, was die schnellste möglichkeit ist.
aber ich denke, dass es bei 1000 werten noch relativ uninteressant ist, welche möglichkeit du nimmst ;).. erst bei >10^10 werten wird es sich vll doch etwas in der zeit niederschlagen
mfg mika