Saya banyak menggunakan std::set<int>
dan seringkali saya hanya perlu memeriksa apakah set seperti itu berisi angka atau tidak.
Menurut saya wajar untuk menulis:
if (myset.contains(number))
...
Tetapi karena kekurangan contains
anggota, saya perlu menulis yang rumit:
if (myset.find(number) != myset.end())
..
atau yang tidak begitu jelas:
if (myset.count(element) > 0)
..
Apakah ada alasan untuk keputusan desain ini?
count()
pendekatan ini adalah bahwa ia melakukan lebih banyak pekerjaan daripada yang countains()
harus dilakukan.
contains()
yang mengembalikan sebuah bool
akan kehilangan informasi berharga tentang di mana unsur ini dalam koleksi . find()
mempertahankan dan mengembalikan informasi tersebut dalam bentuk iterator, oleh karena itu merupakan pilihan yang lebih baik untuk pustaka generik seperti STL. (Itu tidak berarti bahwa a bool contains()
tidak terlalu bagus untuk dimiliki atau bahkan diperlukan.)
contains(set, element)
fungsi gratis menggunakan antarmuka publik set. Oleh karena itu, antarmuka himpunan secara fungsional lengkap; menambahkan metode kenyamanan hanya meningkatkan antarmuka tanpa mengaktifkan fungsi tambahan apa pun, yang bukan merupakan cara C ++.