我有一個像下面結構件的載體:刪除備份結構成員:: vector的
struct pnt
{
bool has;
int num;
};
std::vector<pnt> myvector;
讓我們有這樣一個樣本向量:
myvector (num): 3 4 4 3 5 5 7 8 9 10 10
myvector (has): 1 1 0 1 0 1 0 0 0 1 0
我想要做的是找到重複的成員(根據具有相同的int num),並用false bool成員刪除。 讓自己的矢量變成了這個樣子:
myvector (num): 3 4 3 5 7 8 9 10
myvector (has): 1 1 1 1 0 0 0 1
這樣做,我寫如下功能:
void removeDuplicatedPnt(pnt_vec& myvector)
{
std::vector<pnt>::iterator pnt_iter;
for(pnt_iter = myvector.begin(); pnt_iter != myvector.end(); ++pnt_iter)
{
if(pnt_iter->has)
{
if(pnt_iter->num == (pnt_iter+1)->num)
{
myvector.erase(pnt_iter+1);
}
if(pnt_iter == myvector.begin())
{
continue;
}
if(pnt_iter->num == (pnt_iter-1)->num)
{
myvector.erase(pnt_iter-1);
pnt_iter++;
}
}
}
}
我還可以通過會員的順序檢查做到這一點。但真正的矢量可能會很長。所以這就是爲什麼我第一次去找到真正的布爾成員,然後我檢查了下一個和上一個成員。問題是我如何在效率和穩健性方面修改上述代碼。
注意:我只能使用C++ 03(不是C++ 11)。我也可以使用噓聲(版本1.53),所以如果覺得在那裏有任何有用的功能,請放心。 :)
http://stackoverflow.com/questions/tagged/erase-remove-idiom HTTP:// EN .m.wikipedia.org/wiki/Erase-remove_idiom – 2014-12-05 14:10:55
'if(pnt_iter-> num ==(pnt_iter-1) - > num)'如果'pnt_iter'是矢量中的第一項,這將失敗。 – PaulMcKenzie 2014-12-05 14:15:26
@dasblinkenlight對不起,我編輯了問題 – 2014-12-05 14:18:02