Я работаю над проектом, который содержит структуру данных дерева, причем каждый узел в дереве хранит указатели на дочерние узлы в векторе. В одной из своих функций, я пытаюсь Переберите вектор с использованием итераторов, но, чтобы заставить его работать, я должен назначить разыменованный итератор к временной переменной, например:Зачем мне присваивать этот разыменованный итератор временному значению?
std::vector<Node*>::iterator p;
for (p = n->children.begin(); p < n->children.end(); p++)
{
Node* t = *p;
// if board is complete, mark as such and update score
if (t->m_board.isComplete())
{
// ...
}
}
Если я пытаюсь напишите этот же код без временного значения: if (*p->m_board.isComplete())
, после чего я получаю сообщение об ошибке «выражение должно иметь тип« указатель в класс ». Это не так? Не следует ли разыменовать мой итератор, указав указатель на мой класс Node?
Нет, она не может быть использована «непосредственно». Вы попробовали? http://rextester.com/ZCZWLA76469 – songyuanyao
Дело в том, что итератор указывает на указатель здесь, поэтому вам нужно использовать 'operator *' для разыменования на нем, а затем использовать 'operator->'. Вы можете изобразить, как итератор работает как 'Node ** 'здесь. BTW: Я не сторонник. :) – songyuanyao
@songyuanyao, О, я понимаю, мой надзор ... :-). Благодарю. – WhiZTiM