C++ STL迭代器:断言错误
为什么以下代码会产生断言错误:C++ STL迭代器:断言错误,c++,stl,iterator,erase,C++,Stl,Iterator,Erase,为什么以下代码会产生断言错误:表达式:列表迭代器不兼容 #include <list> using namespace std; int main() { list<int> a; a.push_back(1); list<int>::iterator iter=a.begin(); a.erase(iter); iter==a.end(); } #包括 使用名称空间std; int main() { 清单a; a
表达式:列表迭代器不兼容
#include <list>
using namespace std;
int main()
{
list<int> a;
a.push_back(1);
list<int>::iterator iter=a.begin();
a.erase(iter);
iter==a.end();
}
#包括
使用名称空间std;
int main()
{
清单a;
a、 推回(1);
列表::迭代器iter=a.begin();
a、 擦除(iter);
iter==a.end();
}
当a
更改时(例如通过删除元素),给定集合a
上的迭代器将无效。您要做的是:
#include <list>
using namespace std;
int main()
{
list<int> a;
a.push_back(1);
list<int>::iterator iter=a.begin();
iter = a.erase(iter);
}
#包括
使用名称空间std;
int main()
{
清单a;
a、 推回(1);
列表::迭代器iter=a.begin();
iter=a.erase(iter);
}
当擦除iter
时,它失效。我认为无效迭代器只能用于赋值,甚至不能与任何东西进行比较。你可能想用
iter = a.end();
擦除后迭代器无效。在您的情况下,擦除本身会在删除最后一个元素时返回(您将其删除)结束迭代器,这对于所有类型的容器中的所有迭代器都不正确。哪种类型的容器不正确?您可以
pop_back()<代码> >我的代码> STD::向量<代码>集合>代码> A<代码>没有我的迭代器指向代码中间的某处> A/C>跳过节拍。以此类推。如果您编写了iter=a.end()
,因为您已经替换了无效的迭代器,那么这将是很好的,但是因为您编写了iter==a.end()
,您正在比较一个无效的迭代器,这将导致不兼容的警告