Напоминает мне более общий вопрос Я однажды задал вопрос об итерации / генераторах. На самом деле не было никакого удовлетворительного общего удовлетворительного решения до C ++ 20. В настоящее время вы, вероятно, можете сделать это с сопрограммами, которые выдают следующий элемент и стирают их тип, но я еще не закодировал это.
В любом случае, в вашем случае проблема в коде сводится к двум основным точкам :
- у вас так много контекста, что вы не можете выделить функцию
- вы не можете иметь переменную, которая может содержать оба итератора, потому что итератор формирует вектор итератор
Вы можете выполнять итерации по обоим, используя итерацию на основе индекса, но вам придется решать на каждой итерации, используете ли вы i
или v[i]
. Вытащить условие, вероятно, еще быстрее.
Существует также сложное решение, заключающееся в реализации итератора-обертки, который стирает тип итератора, но если у вас уже нет чего-то подобного, Я бы посоветовал не go для этого решения, потому что оно будет сложным, трудно получить правильное и, вероятно, непропорциональным.
Вы не опубликовали контекст, поэтому я не могу сказать, в какой степени это возможно, но я чувствую, что лучший совет, который я могу вам дать, - это рефакторинг остальной части кода, прежде чем вы коснетесь этой проблемы. Вполне вероятно, что сложность контекста делает это дублирование таким болезненным, а не само дублирование. Отказ от такой проверки является обычной оптимизацией, которая не всегда наносит ущерб удобству обслуживания / читаемости.