Saya menemukan perilaku std::string::find
tidak konsisten dengan wadah standar C ++.
Misalnya
std::map<int, int> myMap = {{1, 2}};
auto it = myMap.find(10); // it == myMap.end()
Tapi untuk sebuah string,
std::string myStr = "hello";
auto it = myStr.find('!'); // it == std::string::npos
Kenapa bukan yang gagal myStr.find('!')
kembali myStr.end()
saja std::string::npos
?
Karena std::string
agak istimewa jika dibandingkan dengan wadah lain, saya bertanya-tanya apakah ada alasan nyata di balik ini. (Anehnya, saya tidak dapat menemukan orang yang mempertanyakan hal ini di mana pun).
std::string
internal terdiri dari karakter yang merupakan elemen murah (dalam hal memori). Dan, lebih jauh lagi, karakter adalah satu-satunya tipe yang std::string
bisa mengandung. Di sisi lain, std::map
terdiri dari elemen yang lebih kompleks. Juga, spesifikasi std::map::find
mengatakan bahwa ia seharusnya menemukan elemen, dan spesifikasi std::string::find
mengatakan bahwa tugasnya adalah menemukan posisi.