std :: vector delete()无法正常工作

时间:2018-11-08 22:46:32

标签: c++ vector

我试图在迭代时从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中的最后一个元素。

我在这里做什么错了?

谢谢。

1 个答案:

答案 0 :(得分:5)

有些东西没有显示给我们。

class Dish{
private:
    const int id;
    const std::string name;
    const int price;
    const DishType type;
};

我猜您最初遇到一个错误,说您不能分配Dish,因为成员是const。因此,您添加了一个不执行任何操作的赋值运算符。是的,它现在可以编译。

不幸的是,vector取决于赋值运算符实际执行的操作,因为当您擦除中间的内容时,它会使用赋值来移动元素。

相关问题