【发布时间】:2017-04-25 17:29:28
【问题描述】:
我使用这样的数组 multiset::iterator it[100] 当我这样做时:it[0] = mymultiset.insert(15) 然后 it[1] = mymultiset.insert(17) 我得到相同的地址,例如 00C0E960(使用 %p)或 12642656(使用 %d)。 我的问题是,我需要实际地址而不是这个...用于与另一个迭代器进行比较。
伪代码:
multiset<int> a;
multiset<int>::iterator x1, x2;
multiset<int>::iterator it[10000];
int j = 0
it[j] = a.insert(15);
x1 = x2 = it[j];
j++;
it[j] = a.insert(74);
x1 = it[j];
printf("Value: %d, addressP: %p, addressD: %d\n", *it[0], it[0], it[0]);
printf("Value: %d, addressP: %p, addressD: %d\n", *x1, x1, x1);
printf("Value: %d, addressP: %p, addressD: %d\n", *it[1], it[1], it[1]);
printf("Value: %d, addressP: %p, addressD: %d\n", *x2, x2, x2);
输出:
Value: 15, addressP: 00BDF0F0, addressD: 12447984
Value: 15, addressP: 00BDF0F0, addressD: 12447984
Value: 74, addressP: 00BDF0F0, addressD: 12447984
Value: 74, addressP: 00BDF0F0, addressD: 12447984
怎么了?
【问题讨论】:
-
也许你应该在尝试打印它们的地址时使用
&获取迭代器对象的地址。我不确定将迭代器打印为地址会做什么,我怀疑它没有定义。 -
听起来像是 XY 问题。你想用这个解决什么问题?
-
您的
printf调用具有三个转换说明符,但只有两个参数。%p转换说明符需要void *类型的参数;printf使用的可变参数函数调用机制无法确保将参数转换为这种类型。 -
打开你的编译器警告。编译器会告诉你至少两个不同的地方是错误的。