У меня есть простой класс последовательностей , который может идентифицировать случайные геномные последовательности фиксированного размера. : Присоединяйтесь к , он работает хорошо, но как только я пытаюсь трудиться с помощью std :: views :: enumerate , я получаю выход для мусора. Я могу проверить, что Valgrind не очень доволен и создает какой-то страшный условный прыжок или перемещение, зависит от неонициализированного значения (ы)
У меня есть простой класс последовательностей , который может идентифицировать случайные геномные последовательности фиксированного размера. : Присоединяйтесь к , он работает хорошо, но как только я пытаюсь трудиться с помощью std :: views :: enumerate , я получаю выход для мусора. Я могу проверить, что Valgrind не очень доволен и создает какой-то страшный условный прыжок или перемещение, зависит от неонициализированного значения (ы) [code]#include #include #include
class SequencesRange { public:
struct iterator { using iterator_category = std::forward_iterator_tag; using value_type = std::string; using difference_type = long; using pointer = value_type*; using reference = value_type const&;
int main (int argc, char** argv) { SequencesRange iterable {1, 10}; // one sequence of length 10
for (auto [i,nt] : iterable | std::views::join | std::views::enumerate) { std::cout Странная вещь: Если я настраиваю итерабильную с последовательностями длины> = 16, у меня нет никакой ошибки. Может быть, побочный эффект от оптимизации коротких строк? /p> Обратите внимание, что у меня нет проблем с упрощенной версией структуры итератора [/code] с использованием целочисленного Sentinel для End экземпляр: < P> демонстрация