c++ - std::vector erase() 没有按预期工作

标签 c++ vector

我试图在迭代时从 OrderPair 的 vector 中删除特定元素,但它没有像我预期的那样工作。我正在尝试删除每个 OrderPairid(第一个)等于 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/

相关文章:

C++:未定义对仿函数重载调用运算符的引用

c++ - 当以多态方式使用时,派生类的 std::vector 成员的复制分配会导致内存泄漏

c++ - std::vector 迭代器不兼容

C++通过范围for循环将整数输入 vector ;随机 0

c++ - 如何在线性时间内对二进制值进行稳定排序?

c++ - 名称 `weak_ptr::lock()` 的原因是什么?

c++ - 在 QtCreator 中调试到外部库

c++ - vector.insert(...) 调用构造函数还是赋值运算符?

android - 在Android Studio中使用PDF矢量图

c++ - 带有默认关键字的纯虚拟析构函数