如何根据位置删除列表中的特定项目

How do I remove a specific item in a list based on its position

示例:我有一个 class 的 myClass,它包含 3 个私有属性:

  1. 字符串项目名称
  2. 浮动金额
  3. 字符串日期

然后我创建一个 myClass

的列表
list<myClass> mytemp;

在我的 mytemp 里面存放了一些物品:

[ itemName ] [ amount ] [ date ]

  1. myproductA 10 011214

  2. myproductB 20 010115

  3. myproductC 30 020115

  4. myproductD 40 040115

我想删除 myproductC

我目前有:

list<myClass>::iterator p=mytemp.begin();

//productC would be list(3)

p++; p++; p++;

//therefore remove:

mytemp.remove(p);

我这样说对吗? 但是 p 是一个迭代器,但是 list::remove 想要一个值。

我该如何克服这个问题?

使用std::list::erase()method.

如果您确定列表中的目标元素是第三个元素,则不用此代码

list<myClass>::iterator p=mytemp.begin();

//productC would be list(3)

p++; p++; p++;

//therefore remove:

mytemp.remove(p);

如果您使用的是 C++11 或更高版本,您可以将其替换为:

mytemp.erase( std::next( mytemp.begin(), 2 ) );

如果您使用的是旧版本,则为:

list<myClass>::iterator p = mytemp.begin();
std::advance( p, 2 );
mytemp.erase( p );

要使用 std::next()std::advance(),您需要 #include <iterator>

至于方法 remove(),它删除 list 中等于给定值的所有元素。