Tôi đang sử dụng rất nhiều std::set<int>
và thường tôi chỉ cần kiểm tra xem một bộ như vậy có chứa một số hay không.
Tôi thấy thật tự nhiên khi viết:
if (myset.contains(number))
...
Nhưng vì thiếu contains
thành viên nên viết rườm rà:
if (myset.find(number) != myset.end())
..
hoặc không rõ ràng:
if (myset.count(element) > 0)
..
Có một lý do cho quyết định thiết kế này?
count()
cách tiếp cận là nó hoạt động nhiều hơn so với việc countains()
phải làm.
contains()
có lợi nhuận một bool
sẽ mất thông tin có giá trị về nơi nguyên tố này là trong bộ sưu tập . find()
bảo toàn và trả về thông tin đó dưới dạng một trình lặp, do đó là lựa chọn tốt hơn cho một thư viện chung như STL. (Đó không phải là để nói rằng một bool contains()
không phải là một rất đẹp-to-có hoặc thậm chí cần thiết, mặc dù.)
contains(set, element)
hàm miễn phí bằng cách sử dụng giao diện công khai của bộ. Do đó, giao diện của tập hợp là hoàn chỉnh về mặt chức năng; thêm một phương thức tiện lợi chỉ làm tăng giao diện mà không kích hoạt bất kỳ chức năng bổ sung nào, đó không phải là cách C ++.