Giới thiệu:
STL là một thư viện lớn, và hữu ích trong nhiều trường hợp, nhưng nó dứt khoát không giải quyết tất cả các tình huống. Trả lời STL hoặc!STL giống như trả lời "STL có đáp ứng nhu cầu của bạn hay không?"
Ưu điểm của STL
- Trong hầu hết các tình huống, STL có một container phù hợp cho một giải pháp nhất định.
- Nó cũng là tài liệu
- Nó cũng được biết (Các lập trình viên thường đã biết điều đó, đi vào một dự án ngắn hơn)
- Nó được thử nghiệm và ổn định.
- Đó là crossplatform
- Nó được bao gồm với mỗi trình biên dịch (không thêm một sự phụ thuộc thư viện 3)
- STL đã được triển khai và sẵn sàng
- STL là sáng bóng, ...
Độ tương phản của STL
Nó không có nghĩa là bạn cần một biểu đồ đơn giản, cây đỏ-đen hoặc cơ sở dữ liệu rất phức tạp của các phần tử có AI quản lý truy cập đồng thời thô một máy tính lượng tử. Thực tế là, STL không, và sẽ không bao giờ giải quyết mọi thứ.
Các khía cạnh sau đây chỉ là một vài ví dụ, nhưng về cơ bản chúng là hậu quả của thực tế này: STL là một thư viện thực sự có giới hạn.
Exceptions: STL relay trên trường hợp ngoại lệ, vì vậy nếu vì lý do nào bạn không thể chấp nhận trường hợp ngoại lệ (ví dụ an toàn quan trọng), bạn có thể không sử dụng STL. Đúng! ngoại lệ có thể bị vô hiệu hóa, nhưng điều đó không giải quyết được thiết kế của chuyển tiếp STL trên chúng và cuối cùng sẽ mang một sự cố.
Cần cụ thể (chưa bao gồm) cấu trúc dữ liệu: đồ thị, cây vv
hạn chế đặc biệt phức tạp: Bạn có thể khám phá ra rằng STL chứa mục đích chung là không phải là tối ưu nhất cho mã cổ chai của bạn.
Cân nhắc đồng thời: Bạn cần đồng thời và STL không cung cấp những gì bạn cần (ví dụ: khóa người đọc không thể được sử dụng dễ dàng do bi-directional [] operator
). Hoặc bạn có thể thiết kế một container lấy lợi ích của đa luồng cho một truy cập/tìm kiếm/chèn/bất cứ điều gì nhanh hơn nhiều.
STL cần phải phù hợp với nhu cầu của bạn, nhưng điều ngược lại cũng đúng: Bạn cần đáp ứng nhu cầu của STL. Đừng cố gắng sử dụng std::vector
trong bộ điều khiển nhúng được nhúng với bộ nhớ RAM không được quản lý 1K.
Khả năng tương thích với các thư viện khác: Có thể vì lý do lịch sử, các thư viện bạn sử dụng không chấp nhận STL (ví dụ: QtWidgets sử dụng chuyên sâu QList của chính nó). Việc chuyển đổi các thùng chứa theo cả hai hướng có thể không phải là giải pháp tốt nhất.
Thực hiện chứa riêng bạn
Sau khi đọc rằng, bạn có thể nghĩ: "Vâng, tôi chắc chắn tôi có thể làm điều gì đó tốt hơn cho trường hợp cụ thể của tôi hơn STL không." CHỜ ĐỢI!
Thực hiện container của bạn một cách chính xác trở nên rất nhanh chóng một nhiệm vụ rất lớn: nó không chỉ về việc thực hiện một cái gì đó làm việc, bạn có thể phải:
- Document nó sâu sắc, trong đó có giới hạn, thuật toán phức tạp, vv.
- Expect lỗi, và giải quyết chúng
- nhu cầu bổ sung Incoming: bạn đã biết, chức năng này mất tích, chuyển đổi giữa các loại vv
- Sau một thời gian, bạn có thể muốn cấu trúc lại, và thay đổi tất cả các phụ thuộc (quá muộn?)
- ....
mã sử dụng mà sâu trong các mã như một container dứt khoát là cái gì đó mất nhiều thời gian để thực hiện, và nên mặc dù cẩn thận.
Sử dụng thư viện của bên thứ 3
Không STL không có nghĩa là tùy chỉnh. Có rất nhiều thư viện tốt trong mạng, một số thậm chí với giấy phép nguồn mở dễ dãi.
Thêm hoặc không phải thư viện bên thứ ba bổ sung là một chủ đề khác, nhưng nó đáng được xem xét.
Nguồn
2017-06-27 14:34:43
Tôi luôn thấy rằng các hộp chứa SDL đều khá nhẹ. Kiểm tra việc triển khai STL của bạn để xem chúng thực sự sử dụng bao nhiêu bộ nhớ. – Albert
Khá. Nếu STL làm những gì bạn muốn, hãy sử dụng nó. Khi nó không còn làm những gì bạn muốn, đó là khi bạn nên xem xét không sử dụng nó. – beldaz