Quiero devolver una referencia de un objeto de un vector, y el objeto está en un objeto iterador. ¿Cómo puedo hacer eso?referencia de devolución de un objeto de un iterador
He intentado lo siguiente:
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
}
En el código, customerList es un vector de clientes, y la función getId devuelve el identificador del cliente.
¿Es correcto el *i
? ¿Y cómo puedo devolver 0 o nulo como referencia?
Alternativamente, podría devolver un puntero. Algo parecido a 'return i! = CustomerList.end()? & * i: NULL; '. –
Es casi posible crear una referencia nula con algo de fundición dudosa, pero una * realmente * mala idea, y probablemente UB en casi todas las circunstancias posibles. – BoBTFish
Sí, depende mucho del uso esperado de la función. Si la expectativa inicial al llamar a la función es que el cliente debería existir, entonces lanzar una excepción tiene sentido. Si su propósito es más de preguntar "¿existe el cliente, y si lo hace, devolver al cliente?", Entonces devolver un tipo de nullable tiene más sentido. –