2012-03-04 65 views
5

Tôi hơi bối rối về sự khác biệt giữa vùng chứa và bộ sưu tập. Tôi đọc về chúng trên Wikipedia và đây là những gì tôi đã hiểu ..Sự khác biệt giữa Bộ sưu tập và Vùng 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ĩ các bộ sưu tập như danh sách, cây vv là cấu trúc dữ liệu, sau đó là các vùng chứa. Điều này có nghĩa là gì ..

Cấu trúc dữ liệu triển khai vùng chứa bao gồm mảng, danh sách, bản đồ, hàng đợi, bộ, ngăn xếp, bảng, cây và vectơ.

+0

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). –

Trả lời

6

Java không thực sự sử dụng thuật ngữ 'container,' ngoại trừ trong bối cảnh AWT thành phần GUI, trong đó một Container đại diện cho một thành phần GUI có thể chứa các thành phần khác.

Collection được sử dụng trong Java cho cấu trúc dữ liệu có chứa các đối tượng, như bạn mô tả. khoa học

máy tính nói chung có xu hướng đối xử với họ như nhiều hay ít đồng nghĩa.

8

" C++ chuẩn ngôn ngữ (ISO/IEC 14.882-1.998 [E]) nói tại khoản 23 rằng container là 'thành phần mà chương trình C++ có thể sử dụng để tổ chức các bộ sưu tập của thông tin', và cho biết thêm:" Container là các đối tượng lưu trữ các đối tượng khác. Họ kiểm soát phân bổ và deallocation của các đối tượng thông qua các nhà thầu, destructors, chèn và xóa các hoạt động. "Nó đi vào danh sách hai loại chung của container: trình tự và các thùng chứa liên kết.

Tiêu chuẩn C++ nói," Một chuỗi là một loại của container mà tổ chức một tập hợp hữu hạn của các đối tượng, tất cả cùng loại, vào một sự sắp xếp đúng tuyến tính." ba loại chuỗi là vector, danh sách, và deque.

C++ Container có thể không chứa Các loại hỗn hợp!

Có lẽ bộ sưu tập C# hữu ích nhất không được coi là một bộ sưu tập. Các mảng C# mạnh hơn nhiều so với các mảng C++ và chúng hỗ trợ nhiều hoạt động đòi hỏi một lớp trong C++. Ví dụ, thuộc tính Length cho bạn biết số lượng các phần tử trong mảng, giống như phương thức size() trong các thùng chứa C++. "

mất từ ​​http://soa.sys-con.com/node/39460, bạn có thể đọc bài viết này cho tốt hiểu các khái niệm container và Bộ sưu tập.

+6

'C# mảng mạnh hơn nhiều so với mảng C++' Có táo không phải là cam. –

5

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, dequevector.

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ư setmap.

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"

2

Sự khác biệt là nhiều hương vị hơn chất, nhưng cảm giác tôi có khi nghe hai thuật ngữ là

  • vùng chứa "có" các giá trị chứa bộ sưu tập
  • "sở hữu" đối tượng mà nó đề cập.

Điều này rõ ràng là chủ quan, nhưng xem xét cách C++ container được thực hiện (giá trị ngữ nghĩa) và cách hoạt động của Java colloection (đa hình của các đối tượng) và biến Java là gì (các con trỏ tự động). các ngữ nghĩa giá trị/con trỏ.

Một C++ chứa không thể đa hình về giá trị, nhưng có thể homomorphic trong con trỏ đến các giá trị đa hình, do đó, một C++ collection<T> chỉ có thể là một container<unique_ptr<T> > (chọn container bạn muốn cụ thể hóa), nơi container<T> không có java thư nghiêm ngặt.

Các vấn đề liên quan