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

标签 c++ iterator

我的项目中有以下代码:

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: start = 65.4238, end = 64.9811”而带有迭代器的代码“Cluster 34026352: start = 1.68113e-316, end = 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 的评论。很可能 p->getInnerRegionPolygons().at(0)->getClusters() 每次调用都会返回新 vector 。在 for( ... ) 运算符中比较来自不同容器的迭代器是不正确的。

关于c++ - 迭代器与非迭代器循环,不同的输出,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9247933/

相关文章:

c++ - 我一直在尝试实现和 AVL 树,但我不断收到这 2 个错误 C2954 和 C2955,并且不知道如何解决它们

java - 如何检查是否处理迭代器中的最后一项?

c++ - 遍历矩阵的方法

c++ - 我正在尝试使用 vector 迭代器创建一个 for 循环

python - 如何解决 "iterator should return strings, not bytes"

c++ - 原子 bool 无法保护非原子计数器

java - 命名空间问题

C++ 通过具有数组索引的类传递参数?

c++ - 用整数哈希替换字符串名称的一些好方法是什么

php - 使用 PHP RecursiveTreeIterator 构建日志读取器