免费注册 查看新帖 |

Chinaunix

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

std vector的问题,vc上编译 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-12 16:22 |只看该作者 |倒序浏览
删除测试,有问题,最后结果是1和3
        std::vector<int> vec;
        for(int i = 0; i < 5; i++)
        {
                vec.push_back(i);
        }
        std::vector<int>::iterator it = vec.begin();
        for(; it!= vec.end(); it++)
        {
                it = vec.erase(it);
                if (it == vec.end())
                {
                        break;       
                }
        }
        it = vec.begin();
        for(; it!= vec.end(); it++)
        {
                printf("%d\n", *it);
        }

论坛徽章:
0
2 [报告]
发表于 2006-10-12 16:25 |只看该作者
结果不是1和3么?

删除后,it=it++了,每次循环后it又执行了++操作,所以就保留了1和3

[ 本帖最后由 beizijing 于 2006-10-12 16:31 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2006-10-12 16:31 |只看该作者
我的意思是全删除,用erase(),应该怎么做

论坛徽章:
0
4 [报告]
发表于 2006-10-12 16:36 |只看该作者
把it++去掉应该就可以了

查了一下vector的三个函数,应该对你有用
iterator erase(iterator pos)  Sequence  Erases the element at position pos.  
iterator erase(iterator first, iterator last)  Sequence  Erases the range [first, last)  
void clear()  Sequence  Erases all of the elements.

判断这个vector是不是为空用下面这个函数:
bool empty() const  Container  true if the vector's size is 0.

[ 本帖最后由 beizijing 于 2006-10-12 16:37 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-10-12 16:39 |只看该作者
vector erase之后,返回下一个元素的iterator

论坛徽章:
0
6 [报告]
发表于 2006-10-12 17:30 |只看该作者
beizijing的回复是正确的,楼主可以看看erase的实现代码:

  1.   iterator erase(iterator position) {
  2.     if (position + 1 != end())
  3.       copy(position + 1, finish, position);
  4.     --finish;
  5.     destroy(finish);
  6.     return position;
  7.   }
复制代码

论坛徽章:
0
7 [报告]
发表于 2006-10-12 23:22 |只看该作者
原帖由 大块头 于 2006-10-12 16:31 发表
我的意思是全删除,用erase(),应该怎么做


erase(v.begin(),v.end());

论坛徽章:
0
8 [报告]
发表于 2006-10-13 09:24 |只看该作者
vector<T>.clear();

论坛徽章:
0
9 [报告]
发表于 2006-10-13 09:54 |只看该作者
原帖由 prc 于 2006-10-13 09:24 发表
vector<T>.clear();


人家说了非要用erase的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP