我试图在迭代时从 OrderPair 的 vector 中删除特定元素,但它没有像我预期的那样工作。我正在尝试删除每个 OrderPair
的 id
(第一个)等于 customer_Id
。我执行以下操作:
for(std::vector<OrderPair>::iterator i = source_Orders.begin(); i != source_Orders.end();)
{
if((*i).first == customer_Id)
{
dest_Orders.push_back(*i);
i = source_Orders.erase(i);
}
else
{
i++;
}
}
// definition of OrderPair
typedef std::pair<int, Dish> OrderPair;
// definition of OrderPair
enum DishType{
VEG, SPC, BVG, ALC
};
// definition of OrderPair
class Dish{
private:
const int id;
const std::string name;
const int price;
const DishType type;
};
当迭代器指向一个符合 if
条件的元素时,(我可以在调试时看到它指向正确的元素),命令 dest_Orders.push_back(*i );
正在按预期工作,然后我试图删除我移动到 dest_Orders
的元素,并继续进行下一次迭代。但是,结果是删除了 vector source_Orders
中的最后一个元素。
我在这里做错了什么?
提前致谢。
最佳答案
有些东西你没有给我们看。
class Dish{
private:
const int id;
const std::string name;
const int price;
const DishType type;
};
我猜你最初得到一个错误,说你不能分配 Dish
因为成员是 const
。所以你添加了一个什么都不做的赋值运算符。是的,现在可以编译了。
不幸的是,vector
依赖赋值运算符实际执行它在 jar 上所说的操作,因为当您删除中间的内容时,它使用赋值来移动元素。
关于c++ - std::vector erase() 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53217293/