Encuentro el comportamiento de std::string::findser inconsistente con los contenedores estándar de C ++.
P.ej
std::map<int, int> myMap = {{1, 2}};
auto it = myMap.find(10); // it == myMap.end()
Pero por una cuerda,
std::string myStr = "hello";
auto it = myStr.find('!'); // it == std::string::npos
¿Por qué no debería la myStr.find('!')devolución fallida en myStr.end()lugar de std::string::npos?
Dado que std::stringes algo especial en comparación con otros contenedores, me pregunto si hay alguna razón real detrás de esto. (Sorprendentemente, no pude encontrar a nadie cuestionando esto en ninguna parte).
std::stringinternamente se compone de personajes que son elementos de bajo costo (en lo que respecta a la memoria). Y, además, el carácter es el único tipo que std::stringpuede contener. Por otro lado, std::mapconsta de elementos más complejos. Además, la especificación de std::map::finddice que se supone que debe encontrar un elemento, y la especificación de std::string::finddice que su tarea es encontrar la posición.