我試圖刪除的結構向量的重複和這種重複是由qieid
在結構確定:分段故障時:: vector的
struct infotable
{
int qieid;
int fid;
int valid;
};
我寫一個子功能做到這一點:
void erase_duplicate(vector<infotable> &info)
{
vector<infotable>::iterator it0,it1;
for(it0 = info.begin();it0 != info.end()-1; it0++)
{
//it1 = find(qieidarray1.begin(),it0,*it0);
for(it1 = it0 +1;it1 != info.end(); it1++)
{
if((*it1).qieid == (*it0).qieid)
it1 = info.erase(it1);
}
}
}
但我有這段代碼的一些問題。 當矢量中的結構數很少時,它可以正常工作。但是,當我對在矢量3000層多結構,程序會出問題,我有:
分段故障11
顯示我的屏幕上。 我知道這是一個內存訪問問題,我可能訪問某處我不應該觸摸的地方,因爲我有這麼多的元素在向量中。 但無論如何,我可以改進我的代碼,以獲得更好的性能(運行更多的元素)?
你有沒有考慮過使用集合而不是矢量?你將需要寫一個比較來告訴集合,兩個具有相同qieid的結構是相等的。 – Katu
@katutxakurra這是一個好主意!我從未使用過套裝。謝謝! –