我是靠谱客的博主 疯狂冰棍,最近开发中收集的这篇文章主要介绍当容器的元素是类指针时,迭代器本质是什么?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

for (vector<Apple*>::iterator iter = vec.begin(); iter != vec.end(); iter++) {
s += (*iter[0])(x); //两句话是一样的
// s += iter[0]->operator()(x);
}

假设有一个类Apple,内部声明了一个成员函数operator(),也就是重载了(),有一个Vector<Apple*>的实例vec,现直接把迭代器iterator用在循环体内调用该成员函数,出现了有趣的现象。原以为iterator本质上就是一个地址。没想到竟然可以访问iter[0],iter[1]。而iter[0]=iter此刻指向元素的地址。iter[1] 是下一个元素的地址。

 

如果写成了s += (*iter)(x)    或者  s += iter->operator()(x)  , 编译器(vs2015)反而会直接提示错误。下面是不同写法编译器产生的不同提示:

------------------------------------------------------------------------------------------------------------

s += *iter(x);

------------------------------------------------------------------------------------------------------------

s += (*iter)(x);
// 或者
s += *iter[0](x);

------------------------------------------------------------------------------------------------------------

s += (*iter[0])(x);

这样才是正确的.

------------------------------------------------------------------------------------------------------------

s += iter->operator()(x);

------------------------------------------------------------------------------------------------------------

s += iter[0]->operator()(x);

这样才是正确的.

------------------------------------------------------------------------------------------------------------

这个特性不禁让人感觉奇怪。今天就先探索到此处吧。日后有时间还会继续调查或者哪位大神愿意解答这个现象请留言。非常感谢!

P.S. 因此为了避免这种奇怪的现象,还是直接采用for (int i = 0; i < vec.size(); i++) 来遍历访问vec吧(逃避可耻hh)。

最后

以上就是疯狂冰棍为你收集整理的当容器的元素是类指针时,迭代器本质是什么?的全部内容,希望文章能够帮你解决当容器的元素是类指针时,迭代器本质是什么?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部