Davranışını std::string::find
standart C ++ kaplarıyla tutarsız buluyorum .
Örneğin
std::map<int, int> myMap = {{1, 2}};
auto it = myMap.find(10); // it == myMap.end()
Ama bir ip için,
std::string myStr = "hello";
auto it = myStr.find('!'); // it == std::string::npos
Başarısız myStr.find('!')
iade neden myStr.end()
yerine neden olmasın std::string::npos
?
Yana std::string
başka kaplarla karşılaştırıldığında biraz özeldir, bu arkasında bazı gerçek neden olup olmadığını merak ediyorum. (Şaşırtıcı bir şekilde, bunu hiçbir yerde sorgulayan kimse bulamadım).
std::string
dahili olarak (bellek açısından) ucuz öğeler olan karakterlerden oluşmasıdır. Ve ayrıca, karakter std::string
içerebilen tek türdür . Öte yandan, std::map
daha karmaşık unsurlardan oluşur. Ayrıca, spesifikasyonunun std::map::find
bir eleman bulması gerektiğini std::string::find
söyler ve spesifikasyonunun görevi pozisyon bulmak olduğunu söyler.