#include <iostream>
#include <vector>
template<typename Iter, typename Func>
void combine_pairwise(Iter first, Iter last, Func func)
{
for(; first != last; ++first)
for(Iter next = std::next(first); next != last; ++next)
func(*first, *next);
}
int main() {
std::vector<float> v {5120.2, 5140.2, 5500.2, 5482.0, 5802.2};
std::vector<float> result;
auto op = [&](const float&f1, const float&f2){result.push_back(f1-f2);};
combine_pairwise(v.begin(), v.end(), op);
for (auto f : result)
{
std::cout << f << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdGVtcGxhdGU8dHlwZW5hbWUgSXRlciwgdHlwZW5hbWUgRnVuYz4Kdm9pZCBjb21iaW5lX3BhaXJ3aXNlKEl0ZXIgZmlyc3QsIEl0ZXIgbGFzdCwgRnVuYyBmdW5jKQp7CiAgICBmb3IoOyBmaXJzdCAhPSBsYXN0OyArK2ZpcnN0KQogICAgICAgIGZvcihJdGVyIG5leHQgPSBzdGQ6Om5leHQoZmlyc3QpOyBuZXh0ICE9IGxhc3Q7ICsrbmV4dCkKICAgICAgICAgICAgZnVuYygqZmlyc3QsICpuZXh0KTsKfQoKaW50IG1haW4oKSB7CglzdGQ6OnZlY3RvcjxmbG9hdD4gdiB7NTEyMC4yLCA1MTQwLjIsIDU1MDAuMiwgNTQ4Mi4wLCA1ODAyLjJ9OwoJc3RkOjp2ZWN0b3I8ZmxvYXQ+IHJlc3VsdDsKCQoJYXV0byBvcCA9IFsmXShjb25zdCBmbG9hdCZmMSwgY29uc3QgZmxvYXQmZjIpe3Jlc3VsdC5wdXNoX2JhY2soZjEtZjIpO307Cgljb21iaW5lX3BhaXJ3aXNlKHYuYmVnaW4oKSwgdi5lbmQoKSwgb3ApOwoJCglmb3IgKGF1dG8gZiA6IHJlc3VsdCkKCXsKCQlzdGQ6OmNvdXQgPDwgZiA8PCBzdGQ6OmVuZGw7Cgl9CglyZXR1cm4gMDsKfQ==