#include <boost/range/numeric.hpp>
#include <boost/function_output_iterator.hpp>
#include <iostream>
#include <string>
#include <vector>
template <class Container>
struct ignore_insert {
// Ignore any insertions that don't match container's type
Container& cont;
ignore_insert(Container& c) : cont(c) {}
void operator() (typename Container::value_type i) {
cont.push_back(i);
}
template <typename T>
void operator() (T) {}
};
template <class Container>
auto ignoreinsrtr(Container& cont) {
return boost::make_function_output_iterator(ignore_insert<Container>{cont});
}
int main() {
std::vector<int> v { 0, 1, 2, 3 }; // any generic STL container
std::vector<std::string> result;
boost::adjacent_difference(v, ignoreinsrtr(result),
[](int a, int b){ return std::to_string(a+b); });
for (auto i : result)
std::cout << i << ", ";
std::cout << '\n';
return 0;
}
I2luY2x1ZGUgPGJvb3N0L3JhbmdlL251bWVyaWMuaHBwPgojaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25fb3V0cHV0X2l0ZXJhdG9yLmhwcD4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgoKdGVtcGxhdGUgPGNsYXNzIENvbnRhaW5lcj4Kc3RydWN0IGlnbm9yZV9pbnNlcnQgewogICAgLy8gSWdub3JlIGFueSBpbnNlcnRpb25zIHRoYXQgZG9uJ3QgbWF0Y2ggY29udGFpbmVyJ3MgdHlwZQogICAgQ29udGFpbmVyJiBjb250OwogICAgaWdub3JlX2luc2VydChDb250YWluZXImIGMpIDogY29udChjKSB7fQogICAgdm9pZCBvcGVyYXRvcigpICh0eXBlbmFtZSBDb250YWluZXI6OnZhbHVlX3R5cGUgaSkgewogICAgICAgIGNvbnQucHVzaF9iYWNrKGkpOwogICAgfQogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICB2b2lkIG9wZXJhdG9yKCkgKFQpIHt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ29udGFpbmVyPgphdXRvIGlnbm9yZWluc3J0cihDb250YWluZXImIGNvbnQpIHsKICAgIHJldHVybiBib29zdDo6bWFrZV9mdW5jdGlvbl9vdXRwdXRfaXRlcmF0b3IoaWdub3JlX2luc2VydDxDb250YWluZXI+e2NvbnR9KTsKfQoKaW50IG1haW4oKSB7CiAgICBzdGQ6OnZlY3RvcjxpbnQ+IHYgeyAwLCAxLCAyLCAzIH07IC8vIGFueSBnZW5lcmljIFNUTCBjb250YWluZXIKICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZXN1bHQ7CiAgICBib29zdDo6YWRqYWNlbnRfZGlmZmVyZW5jZSh2LCBpZ25vcmVpbnNydHIocmVzdWx0KSwKICAgICAgICAgICAgW10oaW50IGEsIGludCBiKXsgcmV0dXJuIHN0ZDo6dG9fc3RyaW5nKGErYik7IH0pOwogICAgZm9yIChhdXRvIGkgOiByZXN1bHQpCiAgICAgICAgc3RkOjpjb3V0IDw8IGkgPDwgIiwgIjsKICAgIHN0ZDo6Y291dCA8PCAnXG4nOwogICAgcmV0dXJuIDA7Cn0KCg==