Вопрос о доступе к объектному методу с помощью векторного итератора - PullRequest
0 голосов
/ 22 апреля 2019

Я новичок в c ++, и у меня есть назначение на вектор / итераторы. Я столкнулся с проблемой, которую мне удалось решить с помощью поиска в Интернете, но, к сожалению, форумы, которые я посетил, только предоставили решение и не объяснили, почему оно работает. Вот проблема, с которой я столкнулся:

std::vector::<Student*>::iterator iter;
for (iter = v_students.begin(); iter != v_students.end(); iter++)
{
     iter*->doStuff(); // Gave me a compile error
}

Я долго пытался решить эту ошибку, но не нашел на форуме кого-то, кто предлагал бы вместо этого:

(*iter)->doStuff;

Размещение * перед итератором и размещение () вокруг него, похоже, решают проблему, но я хотел бы понять, почему. Спасибо!

1 Ответ

0 голосов
/ 22 апреля 2019

У вас есть вектор указателей на объекты.

Когда вы итерируете вектор, объект, который у вас "под рукой", является итератором.Чтобы перейти от этого итератора к объекту в векторе, вы должны разыменовать его (бит (*iter)).Теперь у вас есть указатель.Чтобы перейти от этого к реальному объекту, вам также нужно разыменовать указатель.Это последний (*iter)-> бит.

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