Encuentro el comportamiento de std::string::find
ser 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::string
es 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::string
internamente 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::string
puede contener. Por otro lado, std::map
consta de elementos más complejos. Además, la especificación de std::map::find
dice que se supone que debe encontrar un elemento, y la especificación de std::string::find
dice que su tarea es encontrar la posición.