В настоящее время я пытаюсь просмотреть связанный список типа 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/.
Я также читал о методе node для удаления элементов в списке. Я просто надеюсь, что этот метод работает, поскольку он кажется лучше, и мне любопытно узнать, что я сделал неправильно.
erase
, вы все еще нажимаетеitr++
, что означает, что если вы стерли последний элемент, вы затем выполняете итерацию мимо него, а в других случаях вы пропускаете проверку последовательныхW
. (cpprference.com — гораздо более надежная ссылка, чем cplusplus.com) - person Tony Delroy   schedule 09.05.2016itr++
после стирания - person M.M   schedule 09.05.2016