Вы не можете удалить из одного списка, используя итераторы из другого списка.Итератор "указывает" на некоторый узел в списке.Это указывает на что-то в определенном списке .Когда вы копируете эти вещи в другой список, у вас есть два списка с двумя наборами узлов.Ваш итератор указывает только на одну из этих копий, а не на обе.
В самой программе деструктор std::list
приведет к очистке списка, поэтому вам даже не нужно делать явныеclear.
Как уже говорили другие, вы можете использовать clear , чтобы удалить содержимое списка.Но я не уверен на 100%, что ты собираешься делать.Вы хотите стереть все содержимое списка, который также есть в tmp?Если это так, то вы можете использовать remove_if с предикатом
class CIsContainedInOtherList
{
private:
const std::list<int>& m_list;
public:
CIsContainedInOtherList(const std::list<int>& list);
// return true if val is in m_list
bool operator()(const int& val) const
{
std::list<int>::const_iterator iter
= std::find(m_list.begin(), m_list.end(), val);
return (iter != m_list.end())
}
}
int main()
{
...
CIsContainedInOtherList ifInOtherList(tmp);
std::list<int>::iterator iter =
remove_if(list.begin(), list.end(), ifInOtherList);
// remove everything that matched the predicate
list.erase(iter, list.end());
}