繁体   English   中英

迭代器与非迭代器循环,不同的输出,C ++

[英]Iterator vs. non-iterator loop, different output, 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 ...

“ ...”之后的输出也相等。 为什么没有迭代器的代码给我“ Cluster 0:开始= 65.4238,结束= 64.9811”和带有迭代器“ Cluster 34026352:开始= 1.68113e-316,结束= 1.68113e-316”的代码?

最好的问候Gernot

请使用以下迭代器重写代码:

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;

我同意阿伍德兰德的评论。 p-> getInnerRegionPolygons()。at(0)-> getClusters()最有可能在每次调用时返回新的向量。 并且比较for(...)运算符内部不同容器中的迭代器是不正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM