【发布时间】:2016-08-17 19:34:33
【问题描述】:
非常简单:我有以下代码,但 erase 方法不起作用。我没有看到任何问题,因为如果我去 http://www.cplusplus.com/reference/list/list/erase/ ,语法是:iterator erase (iterator position);
list<pair<string,int>> l0 { { "name1", 20 }, { "name2", 30 }, { "name3", 40 } };
for( auto &it : l0 )
l0 . erase( it );
可能存在pair<string,int> 的list 而不是基本数据类型的list 的问题吗?
编辑:问题是代码不可编译。
【问题讨论】:
-
提示:
it因erase()而改变。 -
除了删除迭代器位置会使该迭代器(或所有迭代器)无效之外,代码不应编译。
-
@DieterLücking 没错,它不会编译。顺便说一句,第一条评论对我没有帮助。请再给我一个提示好吗?
-
@πάνταῥεῖ 你确定这是另一个问题的完全重复吗?我认为 OP 编译他的代码有问题,而不是(还)迭代器无效。
-
@Christophe Exactly.