【发布时间】:2012-11-07 23:20:32
【问题描述】:
给定一个像这样的向量:
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 语句中检查它,我可以解决这个问题(我认为),但据我所知(How to check if the iterator is initialized?)没有真正的方法。
有什么建议吗?
【问题讨论】:
-
矢量
有多大? -
只需将
it初始化为products.begin() + 1即可。 -
不太大...最多 10 个