मुझे 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
कहना है कि यह काम करने के लिए स्थिति है।