免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1218 | 回复: 5
打印 上一主题 下一主题

[C++] 求助 c++ 问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-29 14:10 |只看该作者 |倒序浏览
代码#include <iostream>;
#include <vector>;
#include <assert.h>;
#include <sys/types.h>;

using std::vector;
         
int main(int argc,char **argv)
{         
         
        vector<int *>; pint;
        for(int i=0;i<5;i++)
        {   
                int *p=new int(i);
                pint.push_back(p);
        }
        int j=0;
        vector<int *>;::iterator it;
   
        for(it=pint.begin();it!=pint.end();it++)
        {
             printf("size is %d",pint.size());
             delete (*it);
             pint.erase(it);
             fflush(stdout);
        }

        getchar();
        return 0;
}





结果:size is 5size is 4size is 3Segmentation fault (core dumped)

请问高手,为何pint.erase(it); 不行,谢谢!!!

论坛徽章:
0
2 [报告]
发表于 2004-04-29 14:27 |只看该作者

求助 c++ 问题

你每循环一次,迭代子就向后移一位并删除了一个元素,到第三次到结尾了还有的删么?

论坛徽章:
0
3 [报告]
发表于 2004-04-29 14:27 |只看该作者

求助 c++ 问题

1. 把 pint.erase(it); 一句去掉。在这样的循环过程中,不要改变 pint 的内容。

2. 没有必要删除 pint 中的元素。如果实在想这样做,pint.clear() 即可。

论坛徽章:
0
4 [报告]
发表于 2004-04-30 09:57 |只看该作者

求助 c++ 问题

谢谢二位高人的指点,不用it++,就ok了,以前认为erase() 不会改变itertaor的值,不知其它的容器的迭代器是不是都是这样?

论坛徽章:
0
5 [报告]
发表于 2004-04-30 10:34 |只看该作者

求助 c++ 问题

你认为是把 it++ 去掉好呢,还是把  pint.erase(it) 去掉好?虽然两者都是正确的,但两者的效率却大不一样。

论坛徽章:
0
6 [报告]
发表于 2004-04-30 11:06 |只看该作者

求助 c++ 问题

具体的其它容器类可以看msdn阿,可能谁也不能把所有容器类都用过一遍。看了一下常见的其它容器类erase都是返回删除指定元素后或指定边界后的下一个元素,除非到end
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP