Получить элемент из вектора указателей - PullRequest
0 голосов
/ 12 ноября 2018

у меня есть вектор указателей: std::vector<Customer*> customersList Теперь я хочу получить один из элементов и выполнить с ним операции.я не уверен, что я знаю как, мое предположение было:

Customer* source = restaurant.getCustomer(cust);

проблема в том, что я не знаю, если в c ++ это создаст новый объект, или я просто получу ссылку на него.Есть мой метод получения:

Customer* Table::getCustomer(int id) {
    for (int i = 0; i < customersList.size(); ++i) {
        if (customersList[i]->getId() == id)
            return customersList[i];
    }
    return nullptr;
}

Спасибо

1 Ответ

0 голосов
/ 12 ноября 2018

Функция-член будет возвращать копию указателя, то есть сам объект Customer не копируется, только ссылка на него. Модификация возвращенного Customer* приведет к модификации pointee (базового объекта).

Обратите внимание, что вы также хотите использовать заголовок <algorithm>, в частности std::find_if.

const auto  customer = std::find_if(customerList.begin(), customerList.end(),
    [id](const Customer* c){ return c->getId() == id; });

return customer == customerList.cend() ? nullptr : *customer;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...