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

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

本文关键字:删除 项目 位置 何根 列表      更新时间:2023-10-16

示例:我有一个myClass类,它由3个私有属性组成:

  1. 字符串项名称
  2. 浮点数
  3. 字符串日期

然后我创建一个myClass列表

list<myClass> mytemp;

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

[ 项目名称 ] [ 金额 ] [ 日期 ]

  1. 我的产品A 10 011214

  2. 我的产品B 20 010115

  3. myproductC 30 020115

  4. 我的产品D 40 040115

我想删除我的产品C

我目前有:

list<myClass>::iterator p=mytemp.begin();
//productC would be list(3)
p++; p++; p++;
//therefore remove:
mytemp.remove(p);

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

如何克服这个问题?

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

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中等于给定值的所有元素。

使用std::list::erase()方法。