Я хочу вернуть ссылку объекта из вектора, и объект находится в объекте итератора. Как я могу это сделать?ссылка на возврат объекта из итератора
Я попытался следующие:
Customer& CustomerDB::getCustomerById (const string& id) {
vector<Customer>::iterator i;
for (i = customerList.begin(); i != customerList.end() && !(i->getId() == id); ++i);
if (i != customerList.end())
return *i; // is this correct?
else
return 0; // getting error here, cant return 0 as reference they say
}
В коде CustomerList вектор клиентов, а функция GetId возвращает идентификатор клиента.
Правильно ли это *i
? И как я могу вернуть 0 или null в качестве ссылки?
В качестве альтернативы, он мог бы вернуть указатель. Что-то похожее на 'return i! = CustomerList.end()? & * i: NULL; '. –
Это просто возможность создать нулевую ссылку с некоторым iffy-литьем, но это действительно «плохая идея» и, скорее всего, UB практически во всех возможных обстоятельствах. – BoBTFish
Да, это зависит от ожидаемого использования функции. Если начальное ожидание при вызове функции состоит в том, что клиент должен существовать, то бросание исключения имеет смысл. Если его цель состоит в том, чтобы спросить: «существует ли клиент, а если он это делает, верните клиента», то возврат нулевых типов имеет больше смысла. –