Tôi thấy hành vi của std::string::findnó không phù hợp với các thùng chứa C ++ tiêu chuẩn.
Ví dụ
std::map<int, int> myMap = {{1, 2}};
auto it = myMap.find(10); // it == myMap.end()
Nhưng đối với một chuỗi,
std::string myStr = "hello";
auto it = myStr.find('!'); // it == std::string::npos
Tại sao không nên myStr.find('!')trả lại thất bại myStr.end()thay vì std::string::npos?
Vì std::stringnó có phần đặc biệt khi so sánh với các container khác, tôi tự hỏi liệu có một số lý do thực sự đằng sau điều này. (Đáng ngạc nhiên, tôi không thể tìm thấy bất cứ ai đặt câu hỏi này ở bất cứ đâu).
std::stringbên trong bao gồm các nhân vật là các yếu tố rẻ tiền (liên quan đến bộ nhớ). Và, hơn nữa, nhân vật là loại duy nhất std::stringcó thể chứa. Mặt khác, std::mapbao gồm các yếu tố phức tạp hơn. Ngoài ra, đặc điểm kỹ thuật của việc std::map::findnói rằng nó được cho là tìm thấy một yếu tố và đặc điểm kỹ thuật std::string::findnói rằng nhiệm vụ của nó là tìm vị trí.