Tôi có nên sử dụng deque thay vì véc tơ nếu tôi muốn đẩy các phần tử cũng vào việc bắt đầu container không? Khi nào tôi nên sử dụng danh sách và điểm của nó là gì?STL Containers - diffrence giữa vector, danh sách và deque
Trả lời
Sử dụng deque
nếu bạn cần chèn/xóa hiệu quả ở đầu và cuối chuỗi và truy cập ngẫu nhiên; sử dụng list
nếu bạn cần chèn hiệu quả ở bất cứ nơi nào, tại sự hy sinh của truy cập ngẫu nhiên. Các bộ lặp và tham chiếu đến các phần tử list
rất ổn định dưới bất kỳ đột biến nào của vùng chứa, trong khi deque
có các biến lặp rất đặc biệt và các quy tắc không hợp lệ tham chiếu (vì vậy hãy kiểm tra cẩn thận).
Ngoài ra, list
là vùng chứa dựa trên nút, trong khi deque
sử dụng khối bộ nhớ liền kề, do đó vị trí bộ nhớ có thể có hiệu ứng hiệu suất không thể bị bắt bởi ước tính phức tạp tiệm cận.
deque
có thể hoạt động thay thế cho vector
hầu như ở mọi nơi và có lẽ đã được coi là vùng chứa "mặc định" trong C++ (dựa trên yêu cầu bộ nhớ linh hoạt hơn); lý do duy nhất để thích vector
là khi bạn phải có bố trí bộ nhớ liền kề được đảm bảo của chuỗi của bạn.
deque
và vector
cung cấp quyền truy cập ngẫu nhiên, list
chỉ cung cấp truy cập tuyến tính. Vì vậy, nếu bạn cần để có thể làm container [i], mà quy tắc ra list
. Mặt khác, bạn có thể chèn và xóa các mục ở bất kỳ đâu trong một hiệu quả list
và hoạt động ở giữa các số vector
và deque
chậm.
deque
và vector
rất giống nhau và về cơ bản có thể hoán đổi cho hầu hết các mục đích. Chỉ có hai sự khác biệt đáng nói đến. Đầu tiên, vector
chỉ có thể thêm các mục mới một cách hiệu quả vào cuối, trong khi deque
có thể thêm các mục ở một trong hai đầu một cách hiệu quả. Vậy tại sao bạn sẽ sử dụng vector
sau đó? Không giống như deque
, vector
đảm bảo rằng tất cả các mục sẽ được lưu trữ trong các vị trí bộ nhớ liền kề, làm cho việc lặp lại chúng nhanh hơn trong một số trường hợp.
- 1. Ánh xạ giữa stl C++ và C# containers
- 2. OpenMP và STL vector
- 3. cấu trúc dữ liệu cơ bản của danh sách STL, vector và thiết lập là gì?
- 4. SWIG gói C++ cho Python: dịch một danh sách các chuỗi để một vector STL của chuỗi STL
- 5. Cách tốt nhất để sao chép một vector vào danh sách trong STL?
- 6. Cách tìm kiếm phần tử trong danh sách stl?
- 7. Tự thực hiện STL tương thích STL :: vector
- 8. Tìm cách tìm một vector C++ STL bên trong một vector STL
- 9. Sự khác nhau giữa Danh sách và mảng
- 10. Danh sách C++/giúp đỡ vector
- 11. Add tên vector vào một danh sách
- 12. Whats sự khác biệt giữa danh sách [-1:] [0] và danh sách [len (danh sách) -1]?
- 13. Azure Containers
- 14. Lặp lại vector STL 2 chiều C++
- 15. Thay đổi kích cỡ vector của STL
- 16. STL đẩy nhiều biến đổi vector?
- 17. C++ STL Vector: push_back dùng tham khảo
- 18. Danh sách Clojure so với vector so với số
- 19. Sắp xếp danh sách sử dụng STL loại chức năng
- 20. Làm cách nào để hiển thị danh sách STL qua ranh giới DLL?
- 21. Templates và STL
- 22. Move danh sách phần tử vào cuối trong STL
- 23. Phạm vi deque của Python?
- 24. Twitter Bootstrap Containers
- 25. Sự khác biệt giữa Danh sách <T> và Danh sách <object>?
- 26. sao chép danh sách python: có sự khác biệt giữa [cũ] và danh sách (cũ) không?
- 27. STL và con trỏ const
- 28. Cấu trúc dữ liệu tương đương của các thùng chứa STL
- 29. đếm các phần tử mới trong danh sách vector
- 30. Lisp thường gặp: chuyển đổi giữa danh sách và mảng
'vector' hầu như luôn hoạt động tốt hơn' deque', theo kinh nghiệm của tôi. –
@DonReba: nó phụ thuộc vào trường hợp sử dụng, và lược tả thực sự là câu trả lời duy nhất. Một vector có thể đấu tranh nếu bạn muốn phân bổ một phạm vi rộng lớn, trong khi deque có thể phân bổ các khối mới mà không cần di chuyển những cái cũ. Và tất nhiên nó phụ thuộc vào những gì bạn đang làm. –