Я не слишком разбираюсь в обработке исключений, так что кто-то может помочь мне с этой проблемой? Таким образом, для этой программы, если вы не используете существующий ключ на 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++ действительно оказывают значительное влияние на производительность, если вы его выбрали и поймали. Исключения должны использоваться только в * исключительных случаях. Невозможность проверить ввод пользователя обычно не является таким исключительным случаем. –
Я думаю, что это плохой пример обработки исключений. Вам вообще не нужен блок try-catch. –