-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