Hầu hết các câu trả lời ở đây bỏ lỡ một chi tiết quan trọng: để làm gì?
Bạn muốn giữ gì trong containter?
Nếu đó là một tập hợp các int
s, thì std::list
sẽ mất trong mọi kịch bản, bất kể bạn có thể tái phân bổ hay không, bạn chỉ xóa từ phía trước, v.v. Danh sách chậm hơn để duyệt, mỗi lần chèn sẽ khiến bạn mất tương tác với bộ cấp phát. Sẽ rất khó để chuẩn bị một ví dụ, nơi list<int>
nhịp đập vector<int>
. Và thậm chí sau đó,deque<int>
có thể tốt hơn hoặc đóng, không chỉ sử dụng danh sách, mà sẽ có chi phí bộ nhớ lớn hơn.
Tuy nhiên, nếu bạn đang xử lý các đốm dữ liệu lớn, xấu xí - và một vài trong số đó - bạn không muốn tổng thể hóa khi chèn và sao chép do phân bổ lại sẽ là một thảm họa - thì có lẽ, bạn có thể, tốt hơn là nên list<UglyBlob>
hơnvector<UglyBlob>
.
Tuy nhiên, nếu bạn chuyển sang vector<UglyBlob*>
hoặc thậm chívector<shared_ptr<UglyBlob> >
, một lần nữa - danh sách sẽ bị tụt lại phía sau.
Vì vậy, mẫu truy cập, số phần tử mục tiêu, v.v. vẫn ảnh hưởng đến việc so sánh, nhưng theo quan điểm của tôi - kích thước phần tử - chi phí sao chép, v.v.