Ce face std::adjacent_difference
std::adjacent_difference scrie la destinație a0, a1 - a0, a2 - a1 etc. Este operația inversă lui std::partial_sum: aplicând sumele parțiale pe rezultat, obții înapoi datele inițiale.
Cu un al patrulea argument folosești altă operație între vecini (de exemplu raportul, pentru creștere procentuală).
Parametri
| Parametru | Descriere |
|---|---|
first, last |
Intervalul sursă. |
d_first |
Destinația. |
op |
Opțional. Funcție (curent, anterior). |
Ce returnează
Iterator după ultimul element scris.
Exemple
Exemplul 1: Cât s-a parcurs în fiecare zi
Contorul de kilometri crește cumulat; diferențele arată distanța zilnică.
#include <numeric>
#include <print>
#include <vector>
int main() {
std::vector<int> kilometraj{10200, 10350, 10410, 10690, 10700};
std::vector<int> zilnic(kilometraj.size());
std::adjacent_difference(kilometraj.begin(), kilometraj.end(), zilnic.begin());
for (std::size_t i = 1; i < zilnic.size(); ++i) {
std::println("Ziua {}: {} km", i, zilnic[i]);
}
}
Rezultat
Ziua 1: 150 km
Ziua 2: 60 km
Ziua 3: 280 km
Ziua 4: 10 km
Exemplul 2: Inversul lui partial_sum
#include <numeric>
#include <print>
#include <vector>
int main() {
std::vector<int> v{2, 5, 9, 14};
std::vector<int> dif(v.size());
std::vector<int> inapoi(v.size());
std::adjacent_difference(v.begin(), v.end(), dif.begin());
std::partial_sum(dif.begin(), dif.end(), inapoi.begin());
std::println("Diferențe: {}", dif);
std::println("Înapoi: {}", inapoi);
}
Rezultat
Diferențe: [2, 3, 4, 5]
Înapoi: [2, 5, 9, 14]
Greșeli frecvente
- Uiți că primul element al rezultatului este valoarea inițială, nu o diferență, și îl incluzi în calcule (de exemplu în media diferențelor).
Comenzi înrudite
std::partial_sum: Calculează sumele parțiale (cumulate): fiecare element al rezultatului este suma tuturor elementelor până la el.std::adjacent_find: Găsește prima pereche de elemente vecine egale (sau care îndeplinesc o condiție între ele).std::transform: Aplică o funcție fiecărui element și scrie rezultatele în alt interval (sau în același).