Ich finde das Verhalten von std::string::findinkonsistent mit Standard-C ++ - Containern.
Z.B
std::map<int, int> myMap = {{1, 2}};
auto it = myMap.find(10); // it == myMap.end()
Aber für eine Schnur,
std::string myStr = "hello";
auto it = myStr.find('!'); // it == std::string::npos
Warum sollte die fehlgeschlagene myStr.find('!')Rückkehr nicht myStr.end()statt std::string::npos?
Da das std::stringim Vergleich zu anderen Containern etwas Besonderes ist, frage ich mich, ob es einen wirklichen Grund dafür gibt. (Überraschenderweise konnte ich nirgendwo jemanden finden, der dies in Frage stellte).
std::stringintern aus Zeichen besteht, die kostengünstige Elemente sind (in Bezug auf das Gedächtnis). Außerdem ist Zeichen der einzige Typ, der std::stringenthalten kann. std::mapBesteht dagegen aus komplexeren Elementen. Außerdem std::map::findsagt die Spezifikation von , dass es ein Element finden soll, und die Spezifikation von std::string::findsagt, dass es seine Aufgabe ist, Position zu finden.