ベクトルからオブジェクトの参照を返したいと思います。オブジェクトはイテレータオブジェクトにあります。どうやってやるの?イテレータからのオブジェクトの参照を返します
私は次のことを試みた:コードで
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は、顧客のベクター、及び顧客のIDを返すのgetId関数です。
*i
は正しいですか?そして、0またはnullを参照として返すにはどうすればよいですか?
また、ポインタを返すこともできます。 'return i!= customerList.end()の行に沿って何か? &* i:NULL; '。 –
いくつかのiffyキャストを使用してnull参照を作成することは可能ですが、考えられる可能性のある状況ではUBと考えられます。 – BoBTFish
ええ、それは機能の期待される使用に大きく依存します。関数を呼び出すときの最初の期待が、顧客が存在するはずであれば、例外をスローすることは理にかなっています。その目的が「顧客が存在するかどうか、顧客が存在する場合は顧客を返す」かどうかを問うことが多い場合は、null可能な型を返す方が理にかなっています。 –