Итератор против неитераторского цикла, другой вывод, C ++ - PullRequest
0 голосов
/ 12 февраля 2012

У меня есть следующий код в моем проекте:

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»?

С наилучшими пожеланиями Гернот

1 Ответ

3 голосов
/ 12 февраля 2012

Пожалуйста, перепишите ваш код с помощью итераторов, таких как:

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 () возвращает новый вектор при каждом вызове. И некорректно сравнивать итераторы из разных контейнеров внутри для оператора (...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...