stl中的容器按儲存方式分為兩類,一類是按以陣列形式儲存的容器(如:vector 、deque);另一類是以不連續的節點形式儲存的容器(如:list、set、map)。在使用erase方法來刪除元素時,需要注意一些問題。
在使用 list、set 或 map遍歷刪除某些元素時可以這樣使用:
正確使用方法1
std::list< int> list;
std::list< int>::iterator itlist;
for( itlist = list.begin(); itlist != list.end(); )
else
itlist++;}或
正確使用方法2
std::list< int> list;
std::list< int>::iterator itlist;
for( itlist = list.begin(); itlist != list.end(); )
else
itlist++;
}下面是兩個錯誤的使用方法:
錯誤使用方法1
std::list< int> list;
std::list< int>::iterator itlist;
for( itlist = list.begin(); itlist != list.end(); itlist++)}或
錯誤使用方法2
std::list< int> list;
std::list< int>::iterator itlist;
for( itlist = list.begin(); itlist != list.end(); )
else
itlist++;
}正確使用方法1:通過erase方法的返回值來獲取下乙個元素的位置
正確使用方法2:在呼叫erase方法之前先使用 「++」來獲取下乙個元素的位置
錯誤使用方法1:在呼叫erase方法之後使用「++」來獲取下乙個元素的位置,由於在呼叫erase方法以後,該元素的位置已經被刪除,如果在根據這個舊的位置來獲取下乙個位置,則會出現異常。
錯誤使用方法2:同上。
這裡「++」運算子與我們平常的理解剛好相反,erase( itlist++) 是先獲取下乙個元素的位置在刪除; erase( ++itlist) 是刪除以後再獲取下乙個元素的位置。
在使用 vector、deque遍歷刪除元素時,也可以通過erase的返回值來獲取下乙個元素的位置:
正確使用方法
std::vector< int> vec;
std::vector< int>::iterator itvec;
for( itvec = vec.begin(); itvec != vec.end(); )
else
itlist++;
}注意:vector、deque 不能像上面的「正確使用方法2」的辦法來遍歷刪除。因為vector在erase之後,指向下乙個元素的位置,其實進行erase操作時將後面所有元素都向前移動,迭代器位置沒有移動。這和list不一樣。
STL中用erase 方法遍歷刪除元素
stl中的容器按儲存方式分為兩類,一類是按以陣列形式儲存的容器 如 vector deque 另一類是以不連續的節點形式儲存的容器 如 list set map 在使用erase方法來刪除元素時,需要注意一些問題。在使用 list set 或 map遍歷刪除某些元素時可以這樣使用 正確使用方法1 s...
STL中用ERASE 方法遍歷刪除元素
stl中的容器按儲存方式分為兩類,一類是按以陣列形式儲存的容器 如 vector deque 另一類是以不連續的節點形式儲存的容器 如 list set map 在使用erase方法來刪除元素時,需要注意一些問題。在使用 list set 或 map遍歷刪除某些元素時可以這樣使用 正確使用方法1 s...
STL中用ERASE 方法遍歷刪除元素
stl中的容器按儲存方式分為兩類,一類是按以陣列形式儲存的容器 如 vector deque 另一類是以不連續的節點形式儲存的容器 如 list set map 在使用erase方法來刪除元素時,需要注意一些問題。在使用 list set 或 map遍歷刪除某些元素時可以這樣使用 正確使用方法1 s...