2015-10-25 19 views
6

mam ten wektor:push_back nowy element do wektora

std::vector<my_class> my_vector; 

Chcę dodać nową pozycję z domyślnego konstruktora. Tak więc, piszę:

my_vector.push_back(my_class()); 

Czy jest sposób, aby to zrobić bez bezpośredniego wymieniania typu? Na przykład coś takiego:

my_vector.push_back(auto()); // imaginary code 
+0

Istnieją sposoby, ale sposób w jaki się używasz (z jawnym użyciem 'my_class()') jest najbardziej czytelny, a przez to najbardziej konserwatywny. –

+0

moja_klasa była przykładem .. prawdziwa to std :: para >, std :: wektor >>() Tak więc bałam się czytelności po dodając tę ​​długą –

+0

Inną alternatywą dla samego skończenia jest 'my_vector.resize (my_vector.size() + 1)' –

Odpowiedz

13

std::vector posiada funkcję składową o nazwie emplace_back który konstruuje nową instancję elementu typu nosiciela w wektorze, z argumentów przekazanych do funkcji.

Więc jeśli my_class jest domyślnym constructible, można zrobić:

my_vector.emplace_back(); 
2

my_vector.resize(my_vector.size() + 1);

2

Jeśli klasa pozwala domyślnego konstruktora:

my_vector.push_back({}); 
+0

Nie potrzebuje konstruktora listy inicjalizacyjnej. Potrzebny jest tylko domyślny konstruktor (i oczywiście obsługa C++ 11). – vsoftco

1
my_vector.push_back(decltype(my_vector)::value_type()); 
1

my_vector.push_back({});

lub nawet lepiej

my_vector.emplace_back();

Powiązane problemy