Yoğun bir şekilde kullanıyorum std::set<int>
ve çoğu zaman böyle bir setin bir sayı içerip içermediğini kontrol etmem gerekiyor.
Yazmayı doğal buluyorum:
if (myset.contains(number))
...
Ancak bir contains
üye olmadığı için hantal yazmam gerekiyor:
if (myset.find(number) != myset.end())
..
veya o kadar bariz değil:
if (myset.count(element) > 0)
..
Bu tasarım kararının bir nedeni var mı?
count()
Yaklaşımla ilgili bir başka (daha temel) sorun, bir yaklaşımın yapması gerekenden daha fazla iş countains()
yapmasıdır.
contains()
bir hangi döner bool
olacağını eleman koleksiyonunda olduğu hakkında değerli bilgiler kaybetmek . find()
bu bilgiyi bir yineleyici biçiminde korur ve döndürür, bu nedenle STL gibi genel bir kitaplık için daha iyi bir seçimdir. (Bu bool contains()
,
contains(set, element)
Setin genel arayüzünü kullanarak ücretsiz bir işlev yazmak kolaydır . Bu nedenle, setin arayüzü işlevsel olarak tamamlanmıştır; kullanışlı bir yöntem eklemek, herhangi bir ek işlevi etkinleştirmeden arayüzü artırır, bu C ++ yolu değildir.