關於使用vector時需要注意的細節

jomdalu發表於2020-12-19
vector.erase()刪除iterator後,iterator會指向一個不可預期的地址,故需要將erase()的返回值賦值給iterator。
erase()會傳回下一個iterator的pointer,若在由for迴圈中iter++,則會少考慮了被刪除後的下一個iterator,故需加上--,
將iterator往前移,移到被刪除的iterator的前一個iterator,這樣for loop的++iterator才會考慮到被刪除的下一個iterator。
vector<int> v1;

vector<int>::iterator iter = v1.begin();

for(; iter != v1.end;)

{

    if(*iter == 0x33)

    {

        iter = v1.erase(iter);

    }

    else

    {

        iter++;

    }

}
 

 

相關文章