2015-09-04 66 views
-1

我有一个像卸下两个相同的价值观

2 , 6 , 6 , 8 , 9 

名单我想这就像

2, 8 , 9 

我写了一个代码

for(std::list<int>::iterator i = almostPrimeList.begin(); i != almostPrimeList.end(); ++i) { 
    for(std::list<int>::iterator j = ++std::list<int>::iterator(i); j != almostPrimeList.end(); ++j) { 
     if(*i == *j) { 
      cout <<*i << " found"; 
      //almostPrimeList.remove(*i); 
      break; 
     } 
    } 
} 

它似乎发现的值其中有重复,但是当我想删除它时会造成无限循环

+0

哦!我可以使用STL :: Set数据结构来避免重复列表中的数据.. –

回答

0

如果擦除i或j指向的元素,则迭代器将变为无效。

尝试:

++j ; // move to next 
almostPrimeList.erase(i, j) ; // element pointedby j won't be rased 
i = j ; // ok, reinitialize i 
break ; 
+0

哦,我看到..非常清晰的解释谢谢! –

相关问题