-1
我试图通过迭代每个元素从STL集合数据结构中移除元素。问题是我不能通过迭代集合结构来删除每个元素。当我尝试这种方式,它只是给错误消息或程序卡住了。当它发生时,我认为它是Mingw的bug,所以我尝试了Cygwin g ++;但是Cygwin g ++也不起作用。 我应该如何更改代码使用迭代Mingw,Cygwin g ++,STL集
- MinGW和Cygwin的都安装在Windows 7 x64系统来删除集结构的每个元素。
//Tested by using MinGW, Cygwin g++ in Win64 environment
#include <iostream>
#include <string>
#include <set>
using namespace std;
int main()
{
\t set<int> mySet;
\t mySet.insert(1);
\t mySet.insert(2);
\t mySet.insert(7);
/*
//Works fine
mySet.erase(1);
mySet.erase(2);
mySet.erase(7);
*/
/*
//Error
\t for(set<int>::iterator iter = mySet.begin(); iter != mySet.end(); iter++)
\t \t mySet.erase(iter);
\t //Error
int size = mySet.size();
set<int>::iterator iter = mySet.begin();
for(int i = 0; i < size(); i++)
{
mySet.erase(iter);
iter++
}
*/
//print out elements in mySet
\t for(set<int>::iterator iter = mySet.begin(); iter != mySet.end(); iter++)
\t \t cout << *iter << " ";
\t return 0;
}
'mySet.erase(iter)'使迭代器失效。接下来,你尝试增加这个现在无效的迭代器,于是你的程序展现出未定义的行为。提示:'erase()'返回一个有效的迭代器到下一个元素。无论如何,如果你的目标确实是删除所有元素,只要执行'mySet.clear()' – 2015-03-31 01:50:50