我试图在迭代时从OrderPair向量中擦除特定元素,但是它没有按我期望的那样工作。我正在尝试使用等于OrderPair
的{{1}}(第一个)删除每个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
中的最后一个元素。
我在这里做什么错了?
谢谢。
答案 0 :(得分:5)
有些东西没有显示给我们。
class Dish{
private:
const int id;
const std::string name;
const int price;
const DishType type;
};
我猜您最初遇到一个错误,说您不能分配Dish
,因为成员是const
。因此,您添加了一个不执行任何操作的赋值运算符。是的,它现在可以编译。
不幸的是,vector
取决于赋值运算符实际执行的操作,因为当您擦除中间的内容时,它会使用赋值来移动元素。