int size = objects_op->size();
for (auto &at : objects_op->object) {
EmObject& at = objects_op->objects().at(i);
if (at.sub_type != ObjectType::VISION_PLD) {
continue;
}
for (size_t i = 0; i < 4; i++) {
std::cout << " c: " << at.object.polygon.pts.at(i).transpose()
std::endl;
}
std::cout << BLUE << "after:" << &(at.object.polygon.pts) << RESET
std::endl;
}
上面的代码是正确的结果:
0 c: -3.38838 -4.42124
1 c: -5.64087 -4.45888
2 c: -5.56526 -9.241
3 c: -3.32031 -9.20348
after:0xf5d3760
0 c: -7.13594 3.63844
1 c: -9.28928 3.66867
2 c: -9.26098 8.2844
3 c: -7.10295 8.25414
after:0xf5d3880
但是对于下面的
int size = objects_op->size();
for (size_t i=0; i< size; i++) {
EmObject& at = objects_op->objects().at(i);
if (at.sub_type != ObjectType::VISION_PLD) {
continue;
}
for (size_t i = 0; i < 4; i++) {
std::cout << " c: " << at.object.polygon.pts.at(i).transpose()
std::endl;
}
std::cout << BLUE << "after:" << &(at.object.polygon.pts) << RESET
std::endl;
}
上面的代码是正确的结果:
0 c: -14.9e-18 1.9e+18
1 c: -5.9e-18 -4.4e+17
2 c: -5.56526 -9.241
3 c: -3.32031 -9.20348
after:0xf5d3720
0 c: -2.9e-18 1.2e+18
1 c: -3.9e-18 -4.3e+17
2 c: -9.26098 8.2844
3 c: -7.10295 8.25414
after:0xf5d3870
我不明白这是怎么发生的,请帮忙..
您遇到的问题是由于第二个代码片段中变量
i
的范围造成的。在内部循环中,您为循环变量重新声明 i
,这会隐藏外部循环中用于索引对象的 i
。这就是为什么您会看到意想不到的结果。
您可以将内循环中的变量从
i
更改为 j
。这样,内循环变量就不会干扰外循环变量。