イテレータからオブジェクトの参照を返す 質問する

イテレータからオブジェクトの参照を返す 質問する

ベクターからオブジェクトの参照を返したいのですが、そのオブジェクトはイテレータ オブジェクト内にあります。どうすればできますか?

次のことを試しました:

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 を返すにはどうすればよいですか?

ベストアンサー1

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

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

おすすめ記事