次のようなベクトルが与えられます:
struct product {
float price;
float shipping;
};
vector<product> products;
比率が最大の製品を除いて、ベクトルからすべての製品を削除するにはどうすればよいshipping
ですか?price
イテレータをこれまでに見つかった最高のものに維持してみました...
vector<product>::iterator it = products.begin();
vector<product>::iterator largest = products.begin();
while (it != products.end())
{
if (it->shipping / it->price > largest->shipping / largest->price)
{
products.erase(largest);
largest = it;
++it;
}
else
{
it = products.erase(it);
}
}
これはすべてうまくいきますが、ベクトルの最初の要素の比率が最も高い場合は失敗します(削除されます)。largest
初期化されていない場合は問題を回避でき(私は思う) 、ステートメントでそれをチェックしますが、私が知ることができること(イテレータが初期化されているかどうかをチェックする方法?if
)からこれを行う実際の方法はありません。
助言がありますか?