【发布时间】:2016-09-03 15:57:43
【问题描述】:
我目前正在尝试循环浏览 char 类型的链接列表。当遇到一个参数时(如果它包含字母'w'),我尝试使用 list::erase 删除列表项。我只是希望收到一些关于使用这个函数的建议,我只看到了类型为 int 链接列表的示例,我不知道它是否不起作用,因为它是 char em> 还是什么原因。当我尝试编译以下代码时:
void filterFile(list <char> &myList)
{
list<char>::const_iterator itr;
for (itr = myList.begin(); itr != myList.end(); itr++ )
{
if (*itr == 'w' || *itr == 'W'){
itr = myList.erase (itr);
}
}
}
我收到编译错误:
错误:没有匹配函数调用‘std::__cxx11::list::erase(std::__cxx11::list::const_iterator&)’ itr = myList.erase (itr);
到目前为止,我所做的所有事情都是基于我在这里找到的 http://www.cplusplus.com/reference/list/list/erase/.
我还阅读了有关删除列表中项目的节点方法。我只是希望让这种方法发挥作用,因为它看起来更好,我很想知道我做错了什么。
【问题讨论】:
-
迭代器不应该是 const
-
@Photon 不正确。 See the signature for erase
-
我建议尝试使用常规迭代器而不是 const_iterator。我认为 const_iterator 应该可以工作,但值得一试看看是否是问题所在。
-
你的编译器支持 c++11 吗?
-
另外,当您执行
erase时,您仍然会点击itr++,这意味着如果您删除了最后一个元素,您会遍历它,而在其他情况下,您会错过检查连续的Ws . (cprference.com 比 cplusplus.com 可靠得多)
标签: c++ list linked-list iterator erase