2010-10-24 33 views
21

Trường hợp sử dụng chung cho C++ standard library containers là gì?Trường hợp sử dụng chung cho hộp chứa C++

  • bitset
  • deque
  • danh sách
  • đồ
  • Multimap
  • MultiSet
  • priority_queue
  • đợi
  • thiết
  • ngăn xếp
  • vector

Ví dụ: bản đồ thường tốt hơn cho tìm kiếm được ghép nối.

+1

Đây là bản sao của [Trong trường hợp nào tôi sử dụng một vùng chứa STL cụ thể?] (Https://stackoverflow.com/questions/471432/in-which-scenario-do-i-use-a-particular- stl-container) - các câu trả lời được chấp nhận trong cả hai đều sử dụng cùng một hình ảnh chính xác, và cái đó trước đó, _and_ có nhiều câu trả lời hơn, do đó ... Có vẻ như không cần phải có 2. –

Trả lời

78

Một bức tranh trị giá một nghìn chữ.

container choice flowchart

Nó có sẵn từ nolyc, bot thông tin của ## C++ trên freenode, bằng cách sử dụng lệnh "lựa chọn container" hoặc "containerchoice". Liên kết tới ảnh này bạn nhận được phản hồi được lưu trữ tại adrinael.net, điều này gợi ý chúng tôi nên cảm ơn Adrinael, thành viên của cộng đồng ## C++ của Freenode.

+13

+1: Đó là hình ảnh khá hữu ích. – Arun

+1

Hình ảnh rất hữu ích, khá chính xác những gì tôi đang tìm kiếm – Elpezmuerto

+2

Bạn có một phiên bản cập nhật này để phản ánh các thùng chứa C++ 11 mới không? – Arbalest

13

bitset - được sử dụng để lưu trữ bit. Mục đích chung - lưu trữ một số giá trị của cờ. Bạn không cần nhiều hơn 1 chút cho điều đó.

deque - hàng đợi đã kết thúc gấp đôi - phương thức push_back, push_front, pop_back và pop_front - class basic '. "Không được sắp xếp" (không sắp xếp) container.

list - danh sách được liên kết. Vùng chứa này không liên tục bộ nhớ. Thời gian để thêm và xóa các phần tử là O (1), nhưng tìm kiếm một phần tử cụ thể là O (n). Thùng chứa không có thứ tự.

map - container, lưu trữ cặp (std :: pair). Người đầu tiên là chìa khóa - mọi phần tử từ bản đồ phải có khóa duy nhất. Bản đồ được thể hiện dưới dạng cây, do đó việc tìm kiếm một phần tử trong bản đồ là n * log (n). Vùng chứa này luôn được sắp xếp, đó là lý do tại sao việc thêm và loại bỏ các phần tử có thể gây ra nhiều thời gian hơn - cây (cấu trúc dữ liệu) là nhị phân và cân bằng.

multimap - gần giống như std :: map, nhưng cho phép các cặp có cùng khóa. Ví dụ: multimap có thể chứa các phần tử: (666, "alabala"), (666, "asdfg"), trong khi tiêu chuẩn std :: map không thể. Vùng chứa này cũng được sắp xếp.

multiset - một lần nữa - giống như được đặt nhưng với các yếu tố lặp lại. thiết lập - tốt, điều này cũng luôn luôn được sắp xếp container STL. Ví dụ: một tập hợp là {1, 2, 3} và khi bạn cố gắng thêm '1' vào tập hợp này, tập hợp sẽ không được thêm, vì đã có phần tử như vậy. (nó tương tự với bộ toán học). Vì vậy, multiset cho phép một số phần tử có cùng giá trị, ví dụ {1, 1, 1, 2, 3, 4, 4, 4, 4} là một bội số chính xác, trong khi đó là không phải là một tập hợp. Thêm và loại bỏ phần tử thành std :: set vẫn là thời gian logarit, vì nó được biểu diễn như một cây nhị phân, được sắp xếp và cân bằng.

priority_queue - yếu tố đầu tiên của nó luôn là phần tử lớn nhất trong số đó, theo một số điều kiện đặt hàng yếu kém nghiêm ngặt. Chức năng cơ bản - push_back và pop_back.

queue - Cấu trúc FIFO - Trước tiên, trước hết. (hoặc giống như LILO - Last In - Last Out). Nó tương tự như một hàng đợi tiêu chuẩn - khi bạn đi đến một cửa hàng và bắt đầu chờ đợi trên hàng đợi, người đầu tiên sẽ là người đầu tiên đi. Bạn chỉ có thể push_back và pop_front. Thùng chứa không có thứ tự.

set - Tôi đã mô tả nó trong phần nhiều trang.

stack - LIFO - Last In - First Out - stack. Chức năng cơ bản - push_back, pop_back. Thùng chứa không có thứ tự.

vector - tương tự với mảng C++ chuẩn. Nó được coi là mảng thông thường, nó liên tục bộ nhớ, có thể được chuyển tới một chương trình C (truyền địa chỉ của phần tử đầu tiên). Thùng chứa không có thứ tự.

LƯU Ý QUAN TRỌNG: Tôi đã mô tả chức năng cơ bản, chứ không phải toàn bộ chức năng. Đọc CPlusPlus.com để biết thêm thông tin.

+2

Tôi không biết mọi thứ diễn ra như thế nào trong năm 2010, nhưng ngày nay tôi thấy mọi người khuyên sử dụng [cppreference.com] (http://en.cppreference.com/w/) thay vì cplusplus.com, do cảm giác rằng _cppreference_ có chất lượng tốt hơn. Liên kết tương đương tại _cppreference_ là: [Thư viện thùng chứa] (http://en.cppreference.com/w/cpp/container) Btw, tôi có thể đảm bảo rằng không ai trong chuỗi này đang sử dụng STL; họ đang sử dụng Thư viện chuẩn, mà chỉ xảy ra đã thích nghi rất nhiều từ STL. Xem http://stackoverflow.com/questions/5205491/whats-this-stl-vs-c-standard-library-fight-all-about/5205571#5205571 –

+0

@underscore_d - vâng, cppreference.com chắc chắn là nguồn tốt hơn . Tôi không sử dụng cplusplus.com nữa, nó .. chúng ta hãy nói theo cách này - tôi sẽ không khuyên bạn nên sử dụng nó. Tôi cũng đồng ý với STL và thư viện chuẩn. –

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