По крайней мере, с GCC, не имеет значения, какой вы используете (результаты ниже).Однако, если вы дойдете до того момента, когда вам придется беспокоиться об этом, вам следует использовать указатели или (что еще лучше) некоторую форму умных указателей . .Я бы, конечно, порекомендовал те, что в библиотеке повышения .
Если вы хотите знать, что лучше использовать на практике, я бы предложил либо push_back
или reserve
, поскольку resize будет изменять размер вектора при каждом вызове, если только он не совпадает с запрошенным размером.push_back
и резерв будет изменять размер вектора только при необходимости.Это хорошо, так как если вы хотите изменить размер вектора до size+1
, он может быть уже на size+20
, поэтому вызов изменения размера не даст никакой выгоды.
Тестовый код
#include <iostream>
#include <vector>
class Elem{
public:
Elem(){
std::cout << "Construct\n";
}
Elem(const Elem& e){
std::cout << "Copy\n";
}
~Elem(){
std::cout << "Destruct\n";
}
};
int main(int argc, char* argv[]){
{
std::cout << "1\n";
std::vector<Elem> v;
v.push_back(Elem());
}
{
std::cout << "\n2\n";
std::vector<Elem> v;
v.resize(v.size()+1);
}
}
Тестовый выход
1
Construct
Copy
Destruct
Destruct
2
Construct
Copy
Destruct
Destruct