Hallöle.
Reserve ändert die Vektorgröße nicht [...]
Oh, und wie es das tut. Allerdings merkt man nichts davon, da man so nur einen haufen Null-Objekte erhält, die zwar physisch da sind, für den Nutzer allerdings nicht existieren.
Deswegen verwende ich später dann das reserve(), damit direkt schonmal die Grösse(sobald sie bekannt ist) reserviert wird.
Von std::vector<>#reserve kann man getrost die Finger lassen, sofern man nicht dutzende Aufrufe von std::vector<>#push_back vor hat. Schaden tut's allerdings nicht.
Wenn du ein simples C-Array verwendest, kannst du sorgenfrei die Größe als int32_t mit liefern. Die vier Bytes mehr auf dem Stack werden dein Programm nicht umbringen. Und wenn du schon deswegen bangst, kannst du die Funktion mit __attribute__((fastcall))/__fastcall (?) markieren. Dann werden beide Werte über Register übergeben, verschwenden ergo keine Zeit mit dem Stack. Solche Aufrufkonventionen machen allerdings Ärger bei DLLs und funktionieren nur bei statischen Funktionen.
Das nur noch mal, um zu verdeutlichen, dass std::array<>/std::vector<> nutzerfreundlicher sind. Die Geschwindigkeits-Unterschiede sollten zu vernachlässigen sein.