inny zapis kodu

0

Mam taki kodzik:

vector<double> conv(vector<double> DT, double a){
    double K[2] = {1, -a};
    vector<double> hlp;
    hlp = DT;
 
    for (int i = 1; i < DT.size(); i++){
        hlp[i] = (-DT[i-1]) * a + DT[i];
    }
 
    double c = (-DT[DT.size() - 1] * a);
    hlp.push_back(c);
 
 
    return hlp;
}

Można go jakos czytelniej napisać? albo jakos ładniej? bo ten zapis jakis taki przestarzały, chyba, że sie myle i wyglada według Was oki ?

2

co to znaczy przestarzały dla ciebie? Ja bym się nad samą logiką zastanowił. Bo powiedz mi co to ma to robić i co zwracać? bo coś tu mi dziwnie to wygląda. to jakaś funkcja liniowa? Po co ci k?

edit:
widzę tu różne rzeczy nie halo ale najpierw co to ma robić.

9

Oczywiście, że można, problem w tym, że trudno zrozumieć co to ma robić.
Najgorsza jest nazwa, która nic nie wyjaśnia. conv jest od conversion czy od convolution czy może czegoś innego?

Vec conv2(const Vec& DT, double a){
    Vec result;
    result.reserve(DT.size() + 1);

    std::adjacent_difference(
        DT.begin(), DT.end(), 
        std::back_inserter(result),
        [a](auto x1, auto x0) {
            return x1 - a * x0;
        });

    result.push_back(- a * DT.back());

    return result;
}

https://godbolt.org/z/fMEGd9rY7

1 użytkowników online, w tym zalogowanych: 0, gości: 1