Ребята, у меня есть следующий код, который находится внутри большого цикла while, который выполняет итерацию по дереву. Это так быстро, как я могу получить эту процедуру, но я должен использовать goto. Я принципиально не против goto, но если бы я мог избежать их, я бы хотел. (Я не пытаюсь начать флейм, пожалуйста.)
Ограничения:
current=current->child()
стоит дорого (этоshared_ptr
), поэтому я хотел бы свести к минимуму использование этой операции любой ценой.- После операции
current
должен быть последним найденным дочерним элементом. cnt
должен подсчитывать каждого дочернего элемента, с которым он сталкивается.- cnt++ будет заменен какой-либо другой операцией (или несколькими операциями) и должен появиться только один раз :)
код:
insideloopy:
cnt++;
if ( current->hasChild() )
{
current = current->child();
goto insideloopy;
}
Редактировать: Извините, ребята, изначально забыл упомянуть, что cnt++ должен появляться только один раз. Это будет какая-то операция на узле, и поэтому она должна быть там только один раз. Я также пытаюсь избежать вызова другой функции.