C ++ Ссылки против указателей на переменную внутри цикла? - PullRequest
2 голосов
/ 07 ноября 2011

Могу ли я вместо этого использовать справочную переменную для c (например, Customer &c)?Если так, то как?И является ли это предпочтительным для использования переменной указателя?

    for(std::vector<Customer*>::const_iterator it = customers_.begin();
        it != customers_.end() ; it ++)
    {
        Customer *c = (*it);
        c->PrintName();
        ...
    }

Ответы [ 2 ]

6 голосов
/ 07 ноября 2011

Да:

for(std::vector<Customer*>::const_iterator it = customers_.begin();
    it != customers_.end() ; it ++)
{
    Customer &c = *(*it);
    c.PrintName();
    ...
}

(Скобки не обязательны, но могут прояснить ситуацию.)

3 голосов
/ 07 ноября 2011

Вы можете:

for(std::vector<Customer*>::const_iterator it = customers_.begin();
    it != customers_.end() ; it ++)
{
    Customer const &c = **it;
    c.PrintName();
    ...
}

Вы, вероятно, не хотите этого делать.Скорее всего, customers_ должно быть vector<Customer> вместо vector<Customer *>, и вместо вызова его PrintName члена вам следует перегрузить operator<< для Customer.Сделав это, вы сможете использовать что-то вроде:

std::copy(customers_.begin(), customers.end(), 
          std::ostream_iterator<Customer>(std::cout, "\n"));
...