C++ iterator 问题 为什么会报 vdi 和 j vector iterators incompatible ???

usingnamespacestd;typedefintdata_type;voidMax_Heapify(vector<data_type>v,vector<data_... using namespace std;

typedef int data_type ;

void Max_Heapify(vector<data_type> v,vector<data_type>::iterator j)
{
size_t i = 0;
vector<data_type>::iterator vdi = v.begin();
while (vdi!=j)
{
++i;
++j;
}
}
展开
 我来答
beddy1
2012-08-30 · TA获得超过1989个赞
知道大有可为答主
回答量:2271
采纳率:0%
帮助的人:2214万
展开全部
这是Iterator的设计原则,不同对象的Iterator是不具有可比性的,就算它们是同一个类型也不行。
Iterator的相等性测试必须让它们指向同一个可迭代对象。

你的程序逻辑一定是有问题的,正常的逻辑不可能需要不同对象的迭代器进行比较。
追问
但是我调用的对象是同一个,我是这样用的 Max_Heapify (v,v.begin()); 为什么不行呢?
追答
因为你v传进函数不是用引用啊,实际上函数里面的v是调用拷贝构造函数的复制品。
周生008
2012-08-30 · TA获得超过1222个赞
知道小有建树答主
回答量:1329
采纳率:0%
帮助的人:649万
展开全部
这两个迭代器没有比较的方法,就是说编译器不知道怎么比较这两个迭代器是否相等,估计是迭代器没有重载 == 运算符
你可以这样写 *vdi != *j
追问
照你的方法修改后确实可以了,不过还不能满足我的要求,我需要两个迭代器指向同一个位置,同一类型的两个迭代器不是默认就可以比较的吗?
追答
那你直接用‘=’赋值算了,何必这么麻烦呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式