Wenn Sie die insert
Mitgliedsfunktion auf einem std::vector
aufrufen, wird es reserve
vor dem "Zurückschieben" der neuen Elemente? Ich meine, garantiert der Standard das oder nicht?Ist std :: vector :: insert reserve per Definition?
Mit anderen Worten soll ich tun es wie folgt aus:
std::vector<int> a{1,2,3,4,5};
std::vector<int> b{6,7,8,9,10};
a.insert(a.end(),b.begin(),b.end());
oder so:
std::vector<int> a{1,2,3,4,5};
std::vector<int> b{6,7,8,9,10};
a.reserve(a.size()+b.size());
a.insert(a.end(),b.begin(),b.end());
oder eine andere bessere Lösung?
Dies kann Ihre Frage beantworten: http://stackoverflow.com/questions/2208293/what-ist-most-efficient-way-to-append-one-stdvector-to-the-end-of -another –
Es hängt davon ab, ob die Iteratoren Eingabe-Iteratoren oder streng stärker sind. Für etwas Stärkeres kann man mit "Abstand" rechnen. Es ist QoI, aber jede vernünftige Implementierung sollte nicht mehr als einmal neu zugewiesen werden. –
Sowohl die libstdC++ - als auch die libC++ - Implementierung reserviert Platz für die gesamte Sequenz auf einmal, wenn mindestens Iteratoren vorhanden sind. –