Я обрабатываю форму волны, хранящуюся в векторе. Звуковые каналы чередуются. Я должен обрабатывать каналы отдельно, а затем предоставлять конечный результат в виде чередования (снова). Функции, которые работают на каждом отдельном канале, принимают диапазон, ограниченный итераторами произвольного доступа, и предполагают, что диапазон непрерывный.
Поскольку эти операции должны выполняться в режиме реального времени (или вроде), я хотел бы подделать фазу деперемежения: в других терминах я ищу способ заставить одноканальные функции работать на определенном канале, обратное перемежение и без влияния на их текущий код, предполагающий, что оператор итератора ++
(или --
) перемещается к следующему (или предыдущему) элементу.
Что ты предлагаешь? В настоящее время я думаю о написании пользовательского итератора произвольного доступа. Есть ли другое жизнеспособное решение? Я бы предпочел не использовать boost.
Вы должны предоставить пользовательский итератор, который реализует operator++()
и operator--()
w/r/t количество каналов для сохранения чередования. Вы можете сделать это без использования boost.
Однако вам также придется адаптировать векторный класс для использования новых итераторов. Таким образом, текущий код должен измениться с помощью нового векторного класса.
std::vector
. К счастью, он состоит из STL-подобных функций с допустимыми диапазонами итераторов произвольного доступа.