2010年2月26日 星期五

[C++][STL] delete item in loop

STL 好用是好用,小地方還是要注意,不然很容易爆炸又難DEBUG

1. Use List:
list中erase會回傳iterator,所以要erase(it)
list<int> tmp;
for(list::iterator it = tmp.begin() ; it != tmp.end() ; /*empty*/ )
{
        if( something )
                it = tmp.erase(it);
        else
                it++;
}

2. Use Map:
map中erase竟然又不一樣,回傳void,所以需要erase(it++)
map<int,int> tmp;
for(map::iterator it = tmp.begin() ; it != tmp.end() ; /*empty*/ )
{
        if( something )
                tmp.erase(it++);
        else
                it++;
}

其實應該要看他內部為啥實做成兩種模式的
但是STL聖經一直供在桌上懶得看XD
有空再來研究

沒有留言: