Trovo che il comportamento std::string::find
sia incompatibile con i contenitori C ++ standard.
Per esempio
std::map<int, int> myMap = {{1, 2}};
auto it = myMap.find(10); // it == myMap.end()
Ma per una stringa,
std::string myStr = "hello";
auto it = myStr.find('!'); // it == std::string::npos
Perché il reso non dovrebbe invece essere myStr.find('!')
restituito ?myStr.end()
std::string::npos
Dal momento che std::string
è un po 'speciale rispetto ad altri contenitori, mi chiedo se ci sia qualche vero motivo dietro questo. (Sorprendentemente, non sono riuscito a trovare nessuno in discussione da nessuna parte).
std::string
internamente consiste di personaggi che sono elementi economici (rispetto alla memoria). E, inoltre, il carattere è l'unico tipo che std::string
può contenere. D'altra parte, è std::map
costituito da elementi più complessi. Inoltre, la specifica di std::map::find
dice che dovrebbe trovare un elemento, e la specifica di std::string::find
dice che il suo compito è trovare la posizione.