Problem jest z tej części pętli for
:
std::vector<Foo>::iterator it = var.begin(), i = 0
C++ interpretuje to nie jako dwa sprawozdania oddzielonych przecinkami, ale jako zmienna deklaracji zmiennej o nazwie it
który jest iterator, a jako nowa deklaracja zmiennej i
który jest iterator i inicjowany na 0. błąd jest, ponieważ nie można zainicjować vector
iterator 0.
aby rozwiązać ten problem, trzeba podnosić definicję zewnątrz pętli :
int i = 0;
std::vector<Foo>::iterator it = var.begin();
for(; it < var.end(); it++, i++)
{
// ...
}
Albo przenieść inicjalizacji i
zewnątrz pętli:
int i = 0;
for(std::vector<Foo>::iterator it = var.begin(); it < var.end(); it++, i++)
{
// ...
}
Jest jedna ostatnia opcja, choć. Jeśli chcesz śledzić indeks w wektorze, który aktualnie przeglądasz, możesz rozważyć użycie pętli zliczania (bez iteratora) lub użycie tylko iteratora i użycie odejmowania iteratora do odzyskania indeksu:
for (auto it = var.begin(); it != var.end(); ++it) {
// current position is it - var.begin();
}
Mam nadzieję, że to pomoże!
Zastosowanie ' ++, aby inkrementować iterator, ponieważ 'it ++' to post-inkrementacja i zajmuje niepotrzebny czas. – marbel82