Это может быть оффтоп, но просто подсказка ...
Имейте в виду, что ваша функция (и) / структура данных, вероятно, будут небезопасными для операций чтения. Существует своего рода базовая безопасность потоков, где операции чтения не требуют синхронизации. Если вы собираетесь хранить информацию о том, как много читатель прочитал из вашей структуры, это сделает весь концептуальный поток небезопасным и немного неестественным для использования. Потому что никто не предполагает чтение для операции с полным состоянием.
Если два потока будут вызывать его, им либо потребуется синхронизировать вызовы, либо ваша структура данных может оказаться в состоянии гонки. Проблема в такой конструкции состоит в том, что оба потока должны иметь доступ к общей переменной синхронизации.
Я бы предложил сделать две перегруженные функции. Оба не имеют состояния, но один из них должен принять итератор подсказок, с которого начинать следующее чтение / поиск / поиск и т. Д. Это, например, как реализован Allocator в STL. Вы можете передать в распределитель указатель подсказки (по умолчанию 0), чтобы он быстрее находил новый фрагмент памяти.
С уважением,
Ованес