Quando chiamo std::vector::reserve
quando l'identificatore è di tipo std::vector<Foo*>
reserve(...)
non fa nulla:C++: std :: vector :: riserva non riservando quando contiene puntatori
std::vector<int*> bar;
bar.reserve(20);
//I expect bar.size to return 20...
std::size_t sz = bar.size();
for(std::size_t i = 0; i < sz; ++i) {
//Do Stuff to all items!
}
Il suddetto for
ciclo corre esattamente zero volte e bar. size() restituisce zero. Non ricordo se questo vale anche per tutti gli altri contenitori STL, ma in tal caso, incluso il comportamento per std :: vector: PERCHÉ?
In aggiunta alle cose di seguito, penso che tu voglia usare anche 'std :: vector :: size_type' invece di solo' std :: size_t'. Non sono sicuro che sia così importante, ma ho visto questo come una sorta di "best practice" per STL. Puoi anche creare un'istanza di un vettore con un parametro di dimensione. Penso 'std :: vector bar (20);' per esempio dovrebbe allocare spazio per 20 puntatori interi per quella matrice. –
ely
Il codice pedante come 'for (std :: vector :: size_type i; i
user763305