Tiêu chuẩn ISO C++ thực sự không thiết lập một sự phân biệt rất rõ ràng. Nó cung cấp định nghĩa chính thức cho vùng chứa (23.2.1):
Container là đối tượng lưu trữ các đối tượng khác.
... nhưng không cung cấp định nghĩa chính thức như vậy cho bộ sưu tập và sử dụng cụm từ đó chung chung hơn một chút.Ví dụ: mô tả bộ tuple là một bộ sưu tập của các đối tượng, mặc dù theo định nghĩa ở trên, nó cũng là một hộp chứa .
Bộ sưu tập: Lưu trữ số lượng đối tượng biến. Ví dụ danh sách, đặt ...
Vùng chứa: DataStructures? Ví dụ dequeue, stack ..
Nhưng tôi nghĩ rằng các bộ sưu tập như danh sách, cây vv là cấu trúc dữ liệu, thì hộp chứa là gì. Điều này có nghĩa là gì ..
Theo tôi thấy, và tiêu chuẩn không chỉ định bất kỳ điều gì ngược lại, đây là cả bộ sưu tập và vùng chứa. Chúng cũng là các cấu trúc dữ liệu, nhưng 'cấu trúc dữ liệu' là một thuật ngữ khoa học máy tính rất chung cho bất kỳ loại tổng hợp nào tổ chức dữ liệu theo một cách nào đó.
Với C++, nơi bạn sẽ tìm thấy một sự khác biệt hữu ích hơn là trong các khái niệm rằng STL gốc, được hình thành bởi Stephanov, được định nghĩa.
Trình tự là Vùng chứa có kích thước thay đổi có các thành phần được sắp xếp theo thứ tự tuyến tính nghiêm ngặt. Nó hỗ trợ chèn và loại bỏ các yếu tố .
Ở trên mô tả các vùng chứa như list
, deque
và vector
.
Vùng chứa liên kết được sắp xếp là một loại Vùng chứa liên kết. Vùng chứa liên kết được sắp xếp sử dụng quan hệ đặt hàng trên khóa của chúng; hai khóa được coi là tương đương nếu không có khóa nào nhỏ hơn điểm còn lại. (Nếu mối quan hệ đặt hàng là case-insensitive string so sánh, ví dụ, sau đó các phím "abcde" và "ABCDE" là tương đương.)
Trên đây mô tả container như set
và map
.
Cặp đôi liên kết là vùng chứa liên kết liên kết khóa với một số đối tượng khác. Loại giá trị của Cặp đôi Vùng chứa liên kết là cặp. [1]
Mô tả ở trên chứa các thùng chứa như map
.
Như để đọc thêm về chủ đề này với sự kính trọng đến sự khác nhau về ngữ nghĩa nhẹ: OOP Terminology: "Container" & "Collection"
Tôi nghi ngờ có sự khác biệt thực tế. Hầu hết mọi người dường như sử dụng chúng thay thế cho nhau. Mặc dù vậy, có thể có một vài điều kỳ quặc trong phân cấp OO. Khi tôi nhớ lại, Java có một lớp (hoặc có thể là giao diện) cho các thùng chứa, nhưng một số thứ bạn nghĩ là các thùng chứa không phù hợp với tên gọi đó, vì vậy trong các cuộc thảo luận về Java, tôi có thể tưởng tượng sử dụng một số thuật ngữ khác các lớp giống như thùng chứa (cảnh báo: Tôi đã không sử dụng Java trong một thời gian, vì vậy tôi có thể nhớ tên sai). –