会员
周边
众包
新闻
博问
闪存
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
tonyyang132
博客园
首页
新随笔
联系
管理
订阅
using erase() in a loop like this!
在循环中调用容器的erase()的正确方法,避免迭代器失效引起的程序崩溃。
Code
1
int
main()
2
{
3
//
Initialization
4
vector
<
int
>
iv;
5
for
(size_t i
=
0
; i
!=
10
;
++
i)
6
{
7
iv.push_back(i);
8
}
9
10
//
Print
11
for
(vector
<
int
>
::iterator iter
=
iv.begin(); iter
!=
iv.end();
++
iter)
12
{
13
printf(
"
%d
"
,
*
iter);
14
}
15
printf(
"
\n
"
);
16
17
//
Iterate and erase
18
for
(vector
<
int
>
::iterator iter
=
iv.begin(); iter
!=
iv.end();
/**/
/*
No Increment Here
*/
)
19
{
20
if
(
*
iter
%
2
)
21
{
22
iter
=
iv.erase(iter);
//
After this, iter will point to the first element beyond the erased one
23
}
24
else
25
{
26
++
iter;
27
}
28
}
29
30
//
Print
31
for
(vector
<
int
>
::iterator iter
=
iv.begin(); iter
!=
iv.end();
++
iter)
32
{
33
printf(
"
%d
"
,
*
iter);
34
}
35
printf(
"
\n
"
);
36
37
38
//
The end
39
system(
"
PAUSE
"
);
40
return
0
;
41
}
posted @
2009-10-14 11:51
tonyyang132
阅读(
158
) 评论(
0
)
编辑
收藏
举报
会员力量,点亮园子希望
刷新页面
返回顶部
公告