1

私はこの構造体を持っていると想像してください

struct datalist {
    int index;
    int number;
};

使用しているその構造体では、リストを使用します

while(Iter != m_SomeList.end());
{
    if(*Iter) 
    {
        //do something

        Iter++;
    }
    else   //Iterator is NULL so can we erase it from the list like so?
    {
        datalist* pAR = *Iter;
        Iter = m_SomeList.erase(Iter);
        delete  pAR;    pAR = NULL;
    }
}

基本的に問題は、空の/無効なイテレータが NULL の場合、それらをリストから削除して消去できるかということです。

4

2 に答える 2

6

ポインターのリストがある場合は、null ポインターをより簡単に削除できます。

std::list<datalist*> m_SomeList = /* ... */;
m_SomeList.remove(NULL);

deleteポインタはすでにどこも指していないので、明らかに呼び出す必要はありません。

一方、消去ロジックを、ポインターを NULL に設定するプログラムの他の部分 (ここでは示していません) と組み合わせると、より効果的かもしれません。

于 2012-05-13T20:42:40.340 に答える
1

が であると仮定するIterlist<datalist *>::iterator、はい、できます。

pARnull であることがわかっているため、削除する必要はありませんが、削除してもかまいません(効果はありません)。消去を処理する正しい方法でループを記述しました。

(ただし、常に C++ で記述し++Iter;ないIter++;でください。多くの場合同じですが、前者の方がはるかに効率的です。)

于 2012-05-13T20:42:44.223 に答える