想要实现一个函数,其功能:删除输入的set容器中的偶数
void select_test(std::set<int>& data)
{
set<int>::iterator iter;
for (iter = data.begin(); iter != data.end(); iter++)
{
cout << *iter << endl;
}
for (iter = data.begin(); iter != data.end(); iter++)
{
if (*iter % 2 == 0)
vp_data.erase(iter);
}
for (iter = vp_data.begin(); iter != vp_data.end(); iter++)
{
cout << *iter << endl;
}
}
发生错误:iterator not incrementable
原因:使用迭代器遍历的时候使用erase()之后会使迭代器失效,但是在迭代器失效的同时这个erase函数会返回一个指向下一个对象的迭代器,所以可以使迭代器重新赋值为erase()的返回值。
void select_test(std::set<int>& data)
{
set<int>::iterator iter;
for (iter = data.begin(); iter != data.end(); iter++)
{
cout << *iter << endl;
}
for (iter = data.begin(); iter != data.end();)
{
if (*iter % 2 == 0)
iter = vp_data.erase(iter);
else
iter++;
}
for (iter = data.begin(); iter != data.end(); iter++)
{
cout << *iter << endl;
}
}
int main()
{
int a[] = {11,12,13,14,15,16};
std::set<int> vp(a,a+6);
remove_test(vp);
return 0;
}
在尝试从C++的set容器中删除偶数元素时遇到'iterator not incrementable'错误。问题出在使用erase()后未正确处理迭代器。解决方法是将迭代器更新为erase()返回的新迭代器。
643

被折叠的 条评论
为什么被折叠?



