原文:
stl中list的erase用法
erase的作用是,使作為引數的迭代器失效,並返回指向該迭代器下一引數的迭代器。
如下: list particlesystem;
list
::iterator pointer;
if(pointer-
>dead =
=true)
有一段關於錯誤使用erase的程式
#include
#include
using namespace std;
int main()}
問題:該程式不能跳出迴圈
原因:test_list.erase(test_list_it);每次做erase時都有可能使迭代器失效,test_list_it++就發生錯誤了。可以參見effective stl一書。所有容器做erase操作時都有可能使迭代器失效。
改為:for
(;test_list_it !
= test_list.
end();
)orfor(
;test_list_it !
= test_list.
end();
) 注意:for
(;test_list_it !
= test_list.
end(
);test_list_it++;
) 這樣任然是錯誤的,原因是:iter_e=test_list_it 是指標值的複製,它倆其實指向同乙個位置,所以iter_e失效那麼test_list_it也會失效,所以test_list_it++就會有問題
如果是:
for(
;test_list_it !
= test_list.
end();
) 則沒有問題。
0 給主人留下些什麼吧!~~
STL list的erase正確與錯誤用法
原文 stl中list的erase用法 erase的作用是,使作為引數的迭代器失效,並返回指向該迭代器下一引數的迭代器。如下 list particlesystem list iterator pointer if pointer dead true 有一段關於錯誤使用erase的程式 includ...
正確使用stl map的erase方法
正確使用stl map的erase方法 stl的map表裡有乙個erase方法用來從乙個map中刪除掉指令的節點 eg map string string maptest typedef map string string iterator iter iter iter maptest.find k...
正確使用stl map的erase方法
先宣告 下面的文章是針對windows的用法,因為std map的erase函式的windows的實現版本是返回乙個std map的迭代器,但是stl標準裡面的該函式的返回值確是 map.erase有3個過載 void erase iterator position size type erase ...