Как наиболее эффективно выполнить операцию деления двух массивов valarray

Есть массив комплексных чисел

std::valarray<std::complex<double>> Buf;

как наиболее эффективно выполнить операцию деления одного участка этого массива на другой?
Например, если нужно разделить участок с 1024 по 2047 элемент на участок с 0 по 1023 элемент.
Что лучше всего использовать вместо циклов типа "for"?


Ответы (1 шт):

Автор решения: dIm0n

Вот так можно разделить вторую половину std::valarray на первую:

#include <valarray>
#include <complex>
#include <iostream>

int main() {
    std::valarray<std::complex<double>> buf {
            {1., 0.},
            {2., 0.},
            {3., 0.},
            {4., 0.},
    };

    buf[std::slice{2, 2, 1}] /= buf[std::slice{0, 2, 1}];

    for (const auto& item : buf) {
        std::cout << item << '\n';
    }
}

Дока https://en.cppreference.com/w/cpp/numeric/valarray/slice

→ Ссылка