Phương thức khởi tạo từ size_type chỉ gọi hàm tạo của C một lần và rồi sử dụng hàm tạo bản sao cho phần còn lại của các phần tử.
Không đúng kể từ C++11
. Nhìn vào std::vector::vector documentation:
...
vector (count size_type, const T & giá trị, const cấp phát & alloc = cấp phát()); (2)
vector rõ ràng (số lượng size_type, const Allocator & alloc = Allocator()); (3)
...
Và sau đó:
...
2) cấu trúc container với bản số của các yếu tố có giá trị giá trị .
3) Xây dựng vùng chứa có số lượng được chèn vào mặc định trường hợp của T. Không có bản sao nào được tạo.
...
Vì vậy, bạn cần các nhà xây dựng 3 std::vector<C>(size)
Nó có vẻ như hành vi này chỉ tồn tại kể từ khi c++11
.
Tôi không thể tìm thấy cách thực hiện việc này trước c++11
. Vì không có hàm tạo nào có thể làm điều này, nên tùy chọn sẽ tạo ra một véc-tơ rỗng, dự trữ và sau đó là các phần tử emplace_back
. Nhưng emplace_back
là từ c++11
vì vậy ... chúng tôi trở lại hình vuông.
Ông có thể làm rõ cho dù bạn đang bị mắc kẹt với C++ 03? Nếu không, thì không có vấn đề gì để giải quyết. – juanchopanza
Thật vậy, tôi đã sử dụng GNU C++ mặc định của GNU C++ stdlib (mặc định cho các mục tiêu triển khai cũ ít nhất), bao gồm phiên bản cũ hơn của std :: vector. Với stdlib LLVM của thực sự không có vấn đề. – Danra
Nếu bạn đặt '-std = C++ 11' thì stdlib cũng nên làm điều đúng, trừ khi nó rất cũ. – juanchopanza