मुझे std::string::findमानक C ++ कंटेनरों के साथ असंगत होने का व्यवहार लगता है ।
उदाहरण के लिए
std::map<int, int> myMap = {{1, 2}};
auto it = myMap.find(10); // it == myMap.end()
लेकिन एक तार के लिए,
std::string myStr = "hello";
auto it = myStr.find('!'); // it == std::string::npos
इसके बजाय असफल myStr.find('!')वापसी क्यों नहीं होनी चाहिए ?myStr.end()std::string::npos
चूंकि std::stringअन्य कंटेनरों के साथ तुलना में कुछ हद तक विशेष है, मैं सोच रहा हूं कि क्या इसके पीछे कोई वास्तविक कारण है। (हैरानी की बात है, मैं किसी को भी इस पर सवाल नहीं उठा पाया)।
std::stringआंतरिक रूप से ऐसे अक्षर होते हैं जो सस्ती तत्व होते हैं (स्मृति के संबंध में)। और, इसके अलावा, चरित्र ही एकमात्र प्रकार std::stringहो सकता है। दूसरी ओर, std::mapअधिक जटिल तत्व होते हैं। इसके अलावा, विनिर्देश का std::map::findकहना है कि यह एक तत्व खोजने के लिए माना जाता है, और विनिर्देश का std::string::findकहना है कि यह काम करने के लिए स्थिति है।