私は例外処理にあまり慣れていないので、誰かがこの問題を手伝うことができますか?だから、このプログラムでは、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()'と等しいからです。おそらく標準クラスに基づいて自分自身を構成する、[標準例外クラスの1つ](http://en.cppreference.com/w/cpp/error)を使用することをお勧めします。 –
また、あなたの情報のために:例外をスローしない限り例外を使用するとパフォーマンスにはほとんど影響しませんが、C++の例外はスローしてキャッチするとパフォーマンスに大きな影響を与えます。例外は*例外的な場合にのみ使用してください。通常、ユーザー入力の検証に失敗した場合は例外ではありません。 –
これは例外処理の悪い例だと思います。ここでtry-catchブロックは必要ありません。 –