我有下面的代码在我的项目:迭代与非迭代循环,不同的输出,C++
std::cout << "Without iterator:\n";
std::vector<RectangleCluster*> rc = p->getInnerRegionPolygons().at(0)->getClusters();
for (int i = 0; i < rc.size(); i++)
std::cout << "Cluster " << rc.at(i)->getId() << ": start = " << rc.at(i)->getOverlapAtStart() << ", end = " << rc.at(i)->getOverlapAtEnd() << std::endl;
std::cout << "\n\nWith iterator:\n";
for (std::vector<RectangleCluster*>::iterator ci = p->getInnerRegionPolygons().at(0)->getClusters().begin(); ci != p->getInnerRegionPolygons().at(0)->getClusters().end(); ++ci)
std::cout << "Cluster " << (*ci)->getId() << ": start = " << (*ci)->getOverlapAtStart() << ", end = " << (*ci)->getOverlapAtEnd() << std::endl;
控制台输出看起来是这样的:
没有迭代器:
集群0:开始= 65.4238,端= 64.9811
群集1:开始= 64.9811,端= 17.9983
群集2:开始= 17.9983,端= 17.9983 ...
随着迭代:
群集34026352:开始= 1.68113e-316,末端= 1.68113e-316
群集1:开始= 64.9811,端= 17.9983
群集2:开始= 17.9983,端= 17.9983 ...
“...”之后的输出也相同。为什么没有迭代器的代码给我“集群0:开始= 65.4238,结束= 64.9811”和迭代器“集群34026352:开始= 1.68113e-316,结束= 1.68113e-316”的代码?
for (std::vector<RectangleCluster*>::iterator ci = rc.begin(); ci != rc.end(); ++ci)
std::cout << "Cluster " << (*ci)->getId() << ": start = " << (*ci)->getOverlapAtStart() << ", end = " << (*ci)->getOverlapAtEnd() << std::endl;
我同意awoodland的评论:
问候 的Gernot
这里没有足够的信息来说明任何确定性。 (通常一个*最小的*完整的例子使问题更容易回答)。在(0) - > getClusters()是否通过值或引用返回'p-> getInnerRegionPolygons()。我打赌前者 – Flexo 2012-02-12 10:04:28
如果这是有价值的,你的迭代器初始化为一个向量副本,检查是针对另一个副本的另一个迭代器结束!不知道在这种情况下有什么效果。你可以尝试通过初始化数组到单个变量并使用迭代器或暴露p-> getInnerRegionPolygons()。at(0)的接口来提供迭代器? – PermanentGuest 2012-02-12 10:32:33