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


Anmelden zum Antworten