18

I want to return a reference of an object from a vector, and the object is in an iterator object. How can I do that?

I tried the following:

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
}

In the code, customerList is a vector of customers, and the function getId returns the id of the customer.

*i正しいですか?また、参照として 0 または null を返すにはどうすればよいですか?

4

2 に答える 2

25

return *i;は正しいですが、0やその他のそのような値を返すことはできません。顧客がベクターに見つからない場合は、例外をスローすることを検討してください。

ベクトル内の要素への参照を返すときも注意してください。ベクトルに新しい要素を挿入すると、ベクトルがメモリを再割り当てして内容を移動する必要がある場合に、参照が無効になる可能性があります。

于 2012-05-11T10:58:33.310 に答える
4

「null」参照のようなものはありません。メソッドがベクターにない ID を取得すると、意味のある値を返すことができなくなります。また、@reko_t が指摘しているように、ベクトルがその内部を再割り当てすると、有効な参照でさえ無効になる可能性があります。

参照の戻り値の型を使用するのは、しばらくの間有効である既存のオブジェクトへの参照をいつでも返すことができる場合のみにしてください。あなたの場合、どちらも保証されていません。

于 2012-05-11T11:01:08.710 に答える