예외 처리에 익숙하지 않아서 누군가이 문제를 해결할 수 있습니까 ?? 그래서이 프로그램에 대해 std :: map에 존재하지 않는 키를 넣으면 나는 무언가를 던지고 싶습니다. 그러나 무엇을 모르겠습니다.예외 처리. 어떻게 반복자를 던지나요?
지도 키가있는 경우 전화 번호 (문자열)가되지만 존재하지 않으면 무엇이 될까요 ??
class SmartCarrier{
private:
string carrier_name_;
map<string,vector<Message*>> accounts_map;
public:
Search();
}
void phone::Search{
string phone_number;
map<string,vector<Message*>>::iterator iter;
cout << "Enter a phone number: ";
getline(cin,phone_number);
try{
iter = phone_map.find(phone_number);
if (iter ==phone_map.end()) {
//Incase of a non-existing phone number what do I throw?
throw iter;
}
}
catch(/*iter ??? what should the block catch as a value?*/){
cout << "Phone number not found." << endl;
}
'iter'의 유형은 무엇입니까? 그것이 당신이 알아야 할 것입니다. 그것은 항상'phone_map.end()'와 동등 할 것이기 때문에 당신의 경우에는별로 중요하지 않다. 아마도 [표준 예외 클래스 중 하나] (http://en.cppreference.com/w/cpp/error)를 사용하여 표준 클래스를 기반으로 자신 만의 클래스를 만들 것을 제안합니다. –
또한 알아두기 : 예외를 사용하는 것은 예외가 발생하지 않으면 성능에 무시할 수있는 영향을 미치지 만 C++의 예외는 throw하고 catch하는 경우 성능에 상당한 영향을 미칩니다. 예외는 * 예외적 인 경우에만 사용해야합니다. 일반적으로 사용자 입력의 유효성을 검증하지 않는 것은 예외적 인 경우는 아닙니다. –
이것이 예외 처리의 나쁜 예라고 생각합니다. 여기에 try-catch 블록이 전혀 필요하지 않습니다. –