2010-04-12 7 views
7

STL container khác nhau như vector, chồng, thiết, đợi, vv hỗ trợ các phương pháp truy cập khác nhau trên chúng.C++ STL container

Nếu bạn đang mã hóa ví dụ như trong Notepad ++ hoặc vim, bạn phải liên tục tham khảo tài liệu để xem những gì tất cả các phương pháp có sẵn, ít nhất tôi phải làm vậy.

Có cách nào tốt để ghi nhớ vùng chứa nào hỗ trợ phương thức nào không ??

+14

Sử dụng chúng thường xuyên và ngón tay của bạn sẽ nhớ chúng. –

+2

@cambr Có một bộ nhớ tốt là một trong những điều kiện tiên quyết cho một lập trình viên, IMHO. –

+0

Chính xác thì bạn đang tìm gì ở đây? Một số loại bài hát bạn có thể hát để ghi nhớ? Bạn học nó với kinh nghiệm giống như mọi thứ khác. Hoặc sử dụng một IDE hiện đại. – ryeguy

Trả lời

12

Tên của các phương pháp không khác nhau vì lợi ích của sự khác biệt. Nó giúp ghi nhớ những container nào có phương thức nào, để hiểu ý nghĩa của tên. Ví dụ: push_back là vô nghĩa liên quan đến tập hợp. insert không có ý nghĩa gì khi nói về ngăn xếp (tất nhiên ngăn xếp không có mặt trước hoặc mặt sau, vì vậy nó không hỗ trợ push_back, chỉ push). Đối với một vectơ, cả hai đều có ý nghĩa được xác định rõ, do đó vectơ hỗ trợ cả insertpush_back.

+3

'stack',' queue' và 'priority_queue' không phải là vùng chứa ở vị trí đầu tiên (chúng là * bộ điều hợp vùng chứa * với giao diện thực sự nhỏ) :) – UncleBens

3

Sử dụng thứ gì đó đã tích hợp sẵn trong intelliSense như Visual Studio trên Windows hoặc KDevelop trên Linux.

Ngoài ra còn có các tiện ích bổ sung cho vim và emacs cho intelliSense.

+0

@Brian R. Bondy Bạn có nghĩa là không có cách nào để nhớ những điều này một cách dễ dàng? Tôi thực sự không muốn sử dụng các tính năng intellisense. – Moeb

+0

@cambr: Khi bạn sử dụng chúng nhiều hơn trong trường hợp đó, bạn sẽ tự động nhớ chúng. –

+1

Khi bạn nói "Tôi thực sự không muốn sử dụng các tính năng intellisense", những gì chúng ta đều đọc là "Tôi thực sự không muốn trở thành một lập trình viên hiệu quả hơn". – Alan

5

Sử dụng chúng đủ để bạn nhớ các phương pháp của từng loại.

4

Nếu bộ nhớ của bạn không hoạt động, hãy thử giữ a reference of them all trong cửa sổ khác. Nếu bạn có nhiều màn hình, đó là thực sự là tiện dụng để có những thứ như thế này trên màn hình thứ hai (cho bất kỳ loại tài liệu nào).

Ngoài ra, tôi khuyên bạn nên sử dụng một IDE mã hóa thực sự với intelliSense! Notepad ++ có lẽ quá đơn giản để làm việc hiệu quả trong C++.

1

này có thể không chính xác những gì bạn đang tìm kiếm, nhưng Scott Meyers (của "Effective C++" nổi tiếng) đã biên soạn danh sách sau đây của các thuật toán STL dựa trên cuốn sách Nicolai Josuttis "The C thư viện chuẩn ++":

Josuttis’ Summary of STL Algorithms

1

Tìm hiểu chúng là gì và các phương pháp phổ biến, và sau đó sẽ khá dễ nhớ những phương pháp nào áp dụng. STL không hoàn toàn phù hợp, nhưng nó khá tốt.

1

Thừa nhận rằng nó không hỗ trợ ghi nhớ bạn có thể nhận được một số loại intellisense chạy trên vim. Ưu điểm là bạn có thể tạo các thẻ từ cả hai tệp mã nguồn riêng và bên ngoài. Dù sao thì STL cũng cần một phương pháp điều trị đặc biệt được mô tả ở đây.

Tải xuống các vim-script này OmniCppCompleteSuperTab.

Install OmniCppComplete:

  • Unzip plugin ~/.vim.

Install SuperTab:

  • Mở tập tin trong vim ($ vim supertab.vba).
  • Nguồn tệp (: so%).

Cài đặt ctags thông qua trình quản lý gói yêu thích của bạn. Tải xuống và giải nén này file và chạy ctags trên đó.

$ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ tags_stl cpp_src 

Điều này sẽ tạo tệp ctags có tên 'tags_stl' chứa thẻ STL. Sao chép nó bất cứ nơi nào bạn muốn. Thêm các dòng sau đây mà chưa tồn tại để bạn ~/vimrc: ''

set tags+=~/path/to/your/tags_stl 
filetype on 
filetype plugin on 
let OmniCpp_GlobalScopeSearch=1 
let OmniCpp_NamespaceSearch=2 
let OmniCpp_MayCompleteDot=1 
let OmniCpp_MayCompleteArrow=1 
let OmniCpp_MayCompleteScope=1 
let OmniCpp_DisplayMode=1 
let OmniCpp_DefaultNamespaces=["std"] 

này hoàn thành báo cáo STL vào tab '',, '::' và '->' ngay cả khi 'using namespace std; '. Đừng làm điều đó nếu bạn ghét magenta.

3

Thậm chí nếu bạn nhớ tất cả "phương pháp", đó chỉ là một phần của câu chuyện. Để sử dụng hiệu quả STL, bạn cũng cần biết các thuật toán. Tôi sẽ đề nghị đọc về STL trong một cuốn sách hay (Stroustrup, Josuttis, ...) để chỉ nhớ những gì có sẵn, và sau đó trở lại sách hoặc có trang tham chiếu mở khi bạn cần cú pháp chính xác.