对于向量,使用 for(size_t i=0; i< size; i++) and for(auto& at:object) happen two different result

问题描述 投票:0回答:1
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

我不明白这是怎么发生的,请帮忙..

for-loop vector eigen3
1个回答
0
投票

您遇到的问题是由于第二个代码片段中变量

i
的范围造成的。在内部循环中,您为循环变量重新声明
i
,这会隐藏外部循环中用于索引对象的
i
。这就是为什么您会看到意想不到的结果。

您可以将内循环中的变量从

i
更改为
j
。这样,内循环变量就不会干扰外循环变量。

© www.soinside.com 2019 - 2024. All rights reserved.