如何根据位置删除列表中的特定项目
How do I remove a specific item in a list based on its position
示例:我有一个 class 的 myClass,它包含 3 个私有属性:
- 字符串项目名称
- 浮动金额
- 字符串日期
然后我创建一个 myClass
的列表
list<myClass> mytemp;
在我的 mytemp
里面存放了一些物品:
[ itemName ] [ amount ] [ date ]
myproductA 10 011214
myproductB 20 010115
myproductC 30 020115
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
中等于给定值的所有元素。
示例:我有一个 class 的 myClass,它包含 3 个私有属性:
- 字符串项目名称
- 浮动金额
- 字符串日期
然后我创建一个 myClass
list<myClass> mytemp;
在我的 mytemp
里面存放了一些物品:
[ itemName ] [ amount ] [ date ]
myproductA 10 011214
myproductB 20 010115
myproductC 30 020115
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
中等于给定值的所有元素。