Uważam zachowanie std::string::find
jest niespójne ze standardowymi kontenerami C ++.
Na przykład
std::map<int, int> myMap = {{1, 2}};
auto it = myMap.find(10); // it == myMap.end()
Ale dla sznurka
std::string myStr = "hello";
auto it = myStr.find('!'); // it == std::string::npos
Dlaczego zamiast nieudanego myStr.find('!')
powrotu ?myStr.end()
std::string::npos
Ponieważ std::string
jest to coś specjalnego w porównaniu z innymi pojemnikami, zastanawiam się, czy jest jakiś prawdziwy powód tego. (Zaskakujące, nigdzie nie znalazłem nikogo, kto by to kwestionował).
std::string
wewnętrznie składają się z znaków, które są niedrogimi elementami (pod względem pamięci). Co więcej, charakter jest jedynym typem, który std::string
może zawierać. Z drugiej strony std::map
składa się z bardziej złożonych elementów. Ponadto specyfikacja std::map::find
mówi, że ma znaleźć element, a specyfikacja std::string::find
mówi, że jego zadaniem jest znalezienie pozycji.