Hãy xem xét các chương trình sau đó chèn một loạt các yếu tố vào một vector:Có cách nào di chuyển một phạm vi tiêu chuẩn thành một véc tơ không?
vector<string> v1;
vector<string> v2;
v1.push_back("one");
v1.push_back("two");
v1.push_back("three");
v2.push_back("four");
v2.push_back("five");
v2.push_back("six");
v1.insert(v1.end(), v2.begin(), v2.end());
này một cách hiệu quả các bản sao phạm vi, phân bổ đủ không gian trong vector mục tiêu cho toàn bộ phạm vi sao cho tối đa là một thay đổi kích thước sẽ được yêu cầu . Bây giờ xem xét các chương trình sau đó cố gắng để di chuyển một loạt thành một vector:
vector<string> v1;
vector<string> v2;
v1.push_back("one");
v1.push_back("two");
v1.push_back("three");
v2.push_back("four");
v2.push_back("five");
v2.push_back("six");
for_each (v2.begin(), v2.end(), [&v1](string & s)
{
v1.emplace_back(std::move(s));
});
này thực hiện một động thái thành công nhưng không được hưởng những lợi ích mà chèn() có liên quan đến preallocating không gian trong vector mục tiêu, vì vậy vectơ có thể được thay đổi kích cỡ nhiều lần trong quá trình hoạt động.
Vì vậy, câu hỏi của tôi là, có một tương đương chèn có thể di chuyển một phạm vi vào một véc tơ không?
Nếu bạn cần preallocate không gian trong vector, sử dụng 'std :: vector :: reserve', và giữ' push_back'/'emplace_back'. – rubenvb
@rubenvb Có, tôi nghĩ rằng đó có thể là câu trả lời, nó chỉ là một sự xấu hổ không có một phương pháp sạch sẽ như 'insert()' là. – Benj
Đó sẽ là một tối ưu hóa tùy chọn, chỉ có thể khi phạm vi được xác định bởi các trình vòng lặp truy cập ngẫu nhiên. Đừng tin vào nó. –