Pages

2010年1月26日 星期二

vector內元件刪除

 C++中 vector內元素刪除的方法分為兩個~
方法1:
vector<AA>::iterator ite;
for ( ite = vaa.begin(); ite != vaa.end(); )
{
    if (find(intList.begin(), intList.end(),ite->n) != intList.end())
        vaa.erase(++ite);
    else
        ++ite;
}


方法2:
vector<AA>::iterator ite = vaa.begin();
for (ite = vaa.begin(); ite != vaa.end(); ++ite )
{
    if (find(intList.begin(), intList.end(),ite->n) != intList.end())
        vaa.erase(ite);
}

當vector內是物件或是struct時,以上的方法可能會有錯誤,這是因為當
erase時,iterator就會失效,因此可以用下面的方式解決

方法3:
struct AA{
    int a;
    int b;
    int (int x, y){a=x;b=y;}

}

vector<struct AA>::iterator ite = vaa.begin();
for (ite = vaa.begin(); ite != vaa.end(); ++ite )
{
    if (判斷式)
        ite = vaa.erase(ite);
    else
        ++ite;
}

簡單的方法大致如上,其實有其他更好的方法,不過有些複雜像是if_find搭
配#include裡面所定義的方法可以讓vector<物件>刪除更容易

0 意見: