2009-02-18 67 views
5

Tôi đang học C++ và cuốn sách tôi đang đọc (Ngôn ngữ lập trình C++) nói để không phát minh lại bánh xe, dựa vào các thư viện chuẩn. Trong C, tôi thường tạo ra một danh sách liên kết và lặp lại danh sách liên kết (có lẽ tôi đang làm sai điều đó), vì vậy ý ​​tưởng của các thùng chứa có sẵn trong C++, và các thuật toán thực sự hấp dẫn tôi . Tuy nhiên tôi đã đọc một chút trực tuyến, và nghe một số lời chỉ trích từ bạn bè và đồng nghiệp của tôi về STL, vì vậy tôi nghĩ rằng tôi có lẽ tôi muốn chọn một số bộ não ở đây.Một số phương pháp hay nhất của Thư viện chuẩn C++ là gì?

Một số phương pháp hay nhất để sử dụng STL là gì và bạn đã học được gì về STL?

+0

Tôi sẽ quan tâm đến các khiếu nại về STL để chúng tôi có thể bắn chúng xuống. –

+0

Martin, khiếu nại của tôi rất dễ sử dụng. khi tôi cần phải vượt qua hai vòng lặp, đó là lúc tốt nhất một sự bất tiện, và tồi tệ nhất là một sự bất tiện lớn, ví dụ count (obj.getVecByVal(). begin(), obj.getVecByVal(). end(), 5) thất bại không rõ ràng (do lặp lại trên các bản sao riêng biệt) - vì vậy một địa phương có tên là cần thiết –

+0

Martin - khi chúng xuất hiện trở lại Tôi sẽ đăng một câu hỏi mới. Chủ yếu nó là về bugginess và chậm chạp. –

Trả lời

14

Có một cuốn sách đồng hành với chuỗi hiệu ứng C++, được gọi là "Effective STL". Đó là một điểm khởi đầu tốt để tìm hiểu về các phương pháp hay nhất sử dụng thư viện Standard C++ (neé STL).

10

Bạn có thể muốn nhận một bản sao của "Effective C++: 50 cách cụ thể để cải thiện chương trình của bạn và Thiết kế (2nd Edition)":

http://www.amazon.com/Effective-Specific-Addison-Wesley-Professional-Computing/dp/0201924889

tôi đã tìm thấy nó là vô giá, và nó vẫn còn rất có liên quan ngày hôm nay, ngay cả khi bạn không lập trình trong C++.

+0

Có lẽ "hiệu quả STL" của cùng một tác giả sẽ được nhiều hơn đến điểm? –

+0

Đọc tất cả 3 cuốn sách C++ của anh ấy chắc chắn là một thực hành tốt nhất. – twk

+0

Tuyệt vời. Tôi sẽ xem những cuốn sách này. :) –

6

Nếu bạn thực sự muốn tìm hiểu Thư viện chuẩn C++ (bao gồm những thứ như chuỗi không được xem là một phần của STL), bạn cần một cuốn sách hay. Tốt nhất trong khu vực này là "The C++ Standard Library" by Nicolai Jossutis.

1

Bạn nên hiểu khái niệm về mẫuđa hình khác, để sử dụng hiệu quả STL.

1

để tìm hiểu về STL, bạn cần phải hiểu các mẫu và bạn cũng nên có cấu trúc dữ liệu tốt.

3

Tại sao bạn không cho chúng tôi biết những lời chỉ trích đó và chúng tôi sẽ trả lời? Nếu những lời chỉ trích là hợp lệ, chúng tôi sẽ cho bạn biết điều đó. Và nếu không, chúng tôi sẽ cho bạn biết tại sao không.

STL có một lịch sử hỗn hợp, vì ban đầu, 1) ít người hiểu điều đó và 2) ít trình biên dịch đã triển khai chính xác. Nhưng đó là một thập kỷ trước. Hôm nay? Nó hoạt động. Nó hiệu quả. Nó giải quyết rất nhiều vấn đề. Vấn đề lớn nhất với nó là phải mất một thời gian để quấn đầu của bạn xung quanh nó hoạt động như thế nào.

Cách thực hành tốt nhất đơn giản nhất là "Sử dụng STL bất cứ khi nào nó cung cấp chức năng mà bạn cần". Và thật khó để đưa ra lời khuyên cụ thể hơn trừ khi chúng ta biết những gì chỉ trích nó chống lại.

Nhưng nói chung, thường là trường hợp những người chỉ trích nó đơn giản là không phải là lập trình viên C++. C lập trình viên đã học cách sử dụng các lớp học thuộc thể loại này.

5

Các trường hợp duy nhất tôi có thể nghĩ ra khỏi đỉnh đầu khi SC++ L không thích hợp để sử dụng là một số tình huống hiếm hoi trong đó thực hiện đúng cách không được cung cấp (có thể bạn đang làm việc trên một số ít người biết đến nền tảng mà chỉ có các trình biên dịch C++ giới hạn đã được triển khai) hoặc hiệu suất cực đoan là bắt buộc (có thể là mã tồn tại ở cốt lõi của hệ thống đồ họa cho các trò chơi thế hệ tiếp theo).

Nếu bạn đang sử dụng máy tính thông thường, chắc chắn bạn chắc chắn 99% rằng bạn không ở trong trường hợp đầu tiên.Đối với trường hợp thứ hai, bạn hoàn toàn chỉ nên xem xét việc triển khai bộ chứa và thuật toán của riêng bạn vì lý do hiệu suất nếu bạn có bằng chứng dứt khoát từ các công cụ lược tả tốt rằng nút cổ chai trong chương trình của bạn là SC++ L.

Phương pháp hay nhất liên quan đến SC++ L là chỉ cần sử dụng nó bất cứ khi nào có thể. Ngoài ra, hầu như tất cả các mã C++ hiện đại đều sử dụng rất nhiều Boost, mà bạn có thể nghĩ là một phần mở rộng tuyệt vời và lớn đối với SC++ L. Bất cứ khi nào bạn thấy mình muốn thực hiện một nhiệm vụ thuật toán khá chuẩn, bạn nên sử dụng Google để xem liệu SC++ L hoặc Boost có cung cấp các tiện ích đã được tạo trước, thử nghiệm, đã được chứng minh để hoàn thành nhiệm vụ này hay không.

2

STL được viết bởi bộ não tốt nhất. Bạn có thể sẽ không đưa ra thực hiện tốt hơn so với trong hầu hết các trường hợp. Hiệu suất của nó tốt, không có lỗi và đó là một tiêu chuẩn tốt để truyền các tham số giữa các phương thức, API, các thành phần mã và không cần phải nói, nó đóng gói tất cả những thứ xấu xí. Vấn đề là, bạn phải biết cách chọn đúng thùng chứa cho vấn đề của mình. Nếu không, bạn có thể không được hưởng lợi ích của nó. Có một số bài viết trên web về cách chọn đúng hộp chứa STL. Một liên kết tốt là: STL Containers và có biểu đồ luồng tốt về cách chọn vùng chứa của bạn.

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