我整天都有套装问题。有些我能解决,有些则不能。这个从早上起就困扰着我,我已经没有耐心了。请帮忙,强大的stackoverflow!
所以,我有一个包含我的自定义对象的集合,它被称为“vect”并且基于eigen :: matrix。这意味着,我使用[]运算符从vects中获取值。
set<vect*> *tvps=getTheSet();
for (set<vect*>::iterator iter = tvps->begin(); iter != tvps->end(); ++iter)
{
vect v= **iter; // Don't really know why two asterisks,
// but my compiler would complain
int x=v[0];
int y=v[1];
doStuffWith( v[0],v[1]);
}
现在,这将编译并运行一切。但是我从迭代器得到的值是30%垃圾:
x: 110 y: 90
x: 230 y: 130
x: 250 y: 100
x: 230 y: 130
x: 110 y: 290
x: 140 y: 260
x: 180 y: 280
x: 150 y: 210
x: -2147483648 y: 0
x: 180 y: 280
x: 170 y: 230
x: 240 y: 270
x: -2147483648 y: 0
x: -429917536 y: 0
x: 0 y: -2147483648
我检查了集合放在一起的位置,其中放入了值。只有10到300之间的那些......按照预期。我怎么在其中找到其他人?我搞砸了迭代器吗?
答案 0 :(得分:1)
你有一组指向矢量的指针。首先在**iter
中取消引用迭代器,然后将指针放在里面。
保持指针也可能导致您的问题:如果您释放或忘记初始化其中一些,结果将是垃圾。
答案 1 :(得分:1)
为什么会发生这种情况有几种可能性:
clear()
吗?也许你想将指针存储到向量中,否则编译器会因为它不知道如何比较两个向量而给你一个错误。为什么不尝试直接实现comparison函数和存储向量?这样你的工作就会容易得多,而且容易出错。
你现在遇到的问题是集合中的元素似乎没有被排序..实际上它们是由指针值排序的,而不是由X和Y排序的(我想这就是你想要的)