从一个迭代返回的对象的参考(return reference of an object from a

2019-09-17 04:18发布

我想从一个向量返回的对象的参考,并且该对象是在迭代器对象。 我怎样才能做到这一点?

我试过如下:

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顾客的ID的功能。

*i是否正确? 我怎样才能返回0或NULL作为参考?

Answer 1:

return *i; 是正确的,但是你不能返回0,或任何其他此类值。 考虑抛出一个异常,如果客户未在载体中。

返回引用向量元素时也要小心。 如果矢量需要重新分配内存和移动内容载体插入新的元素可以无效您参考。



Answer 2:

没有所谓的“空”引用没有这样的事:如果你的方法获得一个ID,这不是在载体中,这将是无法返回任何有意义的价值。 正如@reko_t指出,即使是有效的引用可当矢量重新分配其内部变得无效。

您应该只使用引用返回类型时,你可以参考随时返回到一个现有的对象,将保持有效一段时间。 在你的情况下,无论是保证。



文章来源: return reference of an object from an iterator