#include <boost/range/numeric.hpp>
#include <boost/function_output_iterator.hpp>
#include <functional>
#include <iostream>
template <class Container>
auto mybackinsrtr(Container& cont) {
// Throw away the first element
return boost::make_function_output_iterator(
[&cont](auto i) -> void {
static bool first = true;
if (first)
first = false;
else
cont.push_back(i);
});
}
int main() {
std::vector<int> v { 0, 1, 2, 3 }; // any generic STL container
std::vector<int> result;
boost::adjacent_difference(v, mybackinsrtr(result), std::plus<>{});
for (auto i : result) {
std::cout << i << ", ";
}
std::cout << '\n';
return 0;
}
I2luY2x1ZGUgPGJvb3N0L3JhbmdlL251bWVyaWMuaHBwPgojaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25fb3V0cHV0X2l0ZXJhdG9yLmhwcD4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnRlbXBsYXRlIDxjbGFzcyBDb250YWluZXI+CmF1dG8gbXliYWNraW5zcnRyKENvbnRhaW5lciYgY29udCkgewogICAgLy8gVGhyb3cgYXdheSB0aGUgZmlyc3QgZWxlbWVudAogICAgcmV0dXJuIGJvb3N0OjptYWtlX2Z1bmN0aW9uX291dHB1dF9pdGVyYXRvcigKICAgICAgICAgICAgWyZjb250XShhdXRvIGkpIC0+IHZvaWQgeyAKICAgICAgICAgICAgICBzdGF0aWMgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgICAgICAgICAgaWYgKGZpcnN0KQogICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBjb250LnB1c2hfYmFjayhpKTsKICAgICAgICAgICAgfSk7Cn0KCgppbnQgbWFpbigpIHsKICAgIHN0ZDo6dmVjdG9yPGludD4gdiB7IDAsIDEsIDIsIDMgfTsgLy8gYW55IGdlbmVyaWMgU1RMIGNvbnRhaW5lcgogICAgc3RkOjp2ZWN0b3I8aW50PiByZXN1bHQ7CiAgICBib29zdDo6YWRqYWNlbnRfZGlmZmVyZW5jZSh2LCBteWJhY2tpbnNydHIocmVzdWx0KSwgc3RkOjpwbHVzPD57fSk7CiAgICBmb3IgKGF1dG8gaSA6IHJlc3VsdCkgewogICAgICAgIHN0ZDo6Y291dCA8PCBpIDw8ICIsICI7CiAgICB9CiAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKICAgIHJldHVybiAwOwp9Cgo=