首页 新闻 会员 周边 捐助

关于迭代器的关系运算符

0
[待解决问题]

通常在使用迭代器时都采用了==和!=

如果遍历时采用<或>会有什么问题?

编译时可以通过的。

Billowen的主页 Billowen | 初学一级 | 园豆:200
提问于:2011-11-03 15:52
< >
分享
所有回答(3)
0

没明白你什么意思?你是想比较两个对象的大小?

顾晓北 | 园豆:10898 (专家六级) | 2011-11-04 09:10

通常我们遍历容器的写法是

for(std::vector<type>::iterator iter = v.begin(); iter != v.end(); ++iter)

{}

如果写成

for(std::vector<type>::iterator iter = v.begin(); iter < v.end(); ++iter)

{}

 

是不是会有问题

支持(0) 反对(0) Billowen | 园豆:200 (初学一级) | 2011-11-04 09:14

@Billowen: 不好意思,没看到是C++,我。net。。。

支持(0) 反对(0) 顾晓北 | 园豆:10898 (专家六级) | 2011-11-05 19:14
0

我没有试过这样,但应该不可以,因为v.end()返回的是最后一个元素后面的位置的地址,那个地址的值是什么,就不好说了,说不定是一个很小的值,你可已编一段代码,跟踪一下就知道了。

风小手 | 园豆:248 (菜鸟二级) | 2012-03-07 23:39
1

iter的本质是指针,进行++的时候实际上是指针的偏移,所以你的!=end()和<end()最终起到的结果类似,上面的写法不会有什么问题,不过在项目中尽量保持一种单一的写法比较好。

zsounder | 园豆:2819 (老鸟四级) | 2012-03-10 03:01

肯定会出现问题的,end()函数返回是list最后一个元素下一个位置的iter,你代码跟踪一下就知道了!

支持(0) 反对(0) 风小手 | 园豆:248 (菜鸟二级) | 2012-03-11 22:22

@风逝一线天: 

”end()函数返回是list最后一个元素下一个位置的iter“,这是基础的东西,这句话大家都知道,你想报答什么?我的回答里有说不是这样吗?

下面这两种方式作用是一样的,有问题吗?你想表达什么意思?

for(std::vector<int>::iterator it = vint.begin(); it<vint.end; ++it)

for(std::vector<int>::iterator it = vint.begin(); it!=vint.end; ++it)


支持(0) 反对(0) zsounder | 园豆:2819 (老鸟四级) | 2012-03-11 22:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册