Ich finde das Verhalten von std::string::find
inkonsistent 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::string
im 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::string
intern aus Zeichen besteht, die kostengünstige Elemente sind (in Bezug auf das Gedächtnis). Außerdem ist Zeichen der einzige Typ, der std::string
enthalten kann. std::map
Besteht dagegen aus komplexeren Elementen. Außerdem std::map::find
sagt die Spezifikation von , dass es ein Element finden soll, und die Spezifikation von std::string::find
sagt, dass es seine Aufgabe ist, Position zu finden.