Je trouve que le comportement de std::string::find
n'est pas cohérent avec les conteneurs C ++ standard.
Par exemple
std::map<int, int> myMap = {{1, 2}};
auto it = myMap.find(10); // it == myMap.end()
Mais pour une chaîne,
std::string myStr = "hello";
auto it = myStr.find('!'); // it == std::string::npos
Pourquoi le myStr.find('!')
retour échoué ne devrait-il pas myStr.end()
plutôt std::string::npos
?
Étant donné que le std::string
est quelque peu spécial par rapport à d'autres conteneurs, je me demande s'il y a une vraie raison derrière cela. (Étonnamment, je n'ai trouvé personne qui remette cela en question).
std::string
interne, se compose de caractères qui sont des éléments peu coûteux (en ce qui concerne la mémoire). Et, en outre, le caractère est le seul type std::string
pouvant contenir. D'autre part, se std::map
compose d'éléments plus complexes. De plus, la spécification de std::map::find
dit qu'il est censé trouver un élément, et la spécification de std::string::find
dit que sa tâche est de trouver la position.