2015-10-25 16 views
6

Tôi có vector này:yếu tố mới push_back Vector

std::vector<my_class> my_vector; 

Tôi muốn thêm mục mới với constructor mặc định. Vì vậy, tôi viết:

my_vector.push_back(my_class()); 

là có cách nào để thực hiện điều đó mà không đề cập đến loại trực tiếp ?. Ví dụ một cái gì đó như:

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

Có nhiều cách, nhưng cách bạn có (bằng cách sử dụng 'my_class()') rõ ràng là dễ đọc nhất và do đó dễ bảo trì nhất. –

+0

my_class là một ví dụ .. thực tế là std :: pair >, std :: vector >>() Vì vậy, tôi sợ khả năng đọc sau thêm dài này –

+0

Một thay thế khác chỉ vì lợi ích đầy đủ là 'my_vector.resize (my_vector.size() + 1)' –

Trả lời

13

std::vector có một hàm thành viên được gọi là emplace_back mà xây dựng một trường hợp mới của loại phần tử của vector trong vector, từ các đối số cung cấp cho các chức năng.

Vì vậy, nếu my_class là constructible mặc định, bạn có thể làm:

my_vector.emplace_back(); 
2

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

2

Nếu lớp học của bạn cho phép một constructor mặc định:

my_vector.push_back({}); 
+0

Nó không cần một hàm tạo danh sách khởi tạo. Nó chỉ cần một hàm tạo mặc định (và hỗ trợ cho C++ 11 tất nhiên). – vsoftco

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

my_vector.push_back({});

hoặc thậm chí tốt hơn

my_vector.emplace_back();

Các vấn đề liên quan