template<class iterator1, class iterator2>
bool almostEqual(iterator1 begin1, iterator1 end1, iterator2 begin2, iterator2 end2, int tolerance)
{
for(;begin1!=end1; ++begin1, ++begin2) {
if (begin2 == end2)
return false;
if (*begin1 - tolerance > *begin2)
return false;
if (*begin1 + tolerance < *begin2)
return false;
}
if (begin2 != end2)
return false;
return true;
}
template<class container1, class container2>
bool almostEqual(container1 left, container2 right, int tolerance)
{ return almostEqual(left.begin(), left.end(), right.begin(), right.end(), tolerance);}
#include <vector>
#include <iostream>
int main() {
std::vector<int> a = {0, 5, 10};
std::vector<int> b = {1, 4, 8};
std::vector<int> c = {2, 2, 10};
std::cout << almostEqual(a, b, 2) << '\n';
std::cout << almostEqual(a, c, 2) << '\n';
std::cout << almostEqual(b, c, 2) << '\n';
}
dGVtcGxhdGU8Y2xhc3MgaXRlcmF0b3IxLCBjbGFzcyBpdGVyYXRvcjI+CmJvb2wgYWxtb3N0RXF1YWwoaXRlcmF0b3IxIGJlZ2luMSwgaXRlcmF0b3IxIGVuZDEsIGl0ZXJhdG9yMiBiZWdpbjIsIGl0ZXJhdG9yMiBlbmQyLCBpbnQgdG9sZXJhbmNlKQp7CiAgICBmb3IoO2JlZ2luMSE9ZW5kMTsgKytiZWdpbjEsICsrYmVnaW4yKSB7CiAgICAgICAgaWYgKGJlZ2luMiA9PSBlbmQyKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKCpiZWdpbjEgLSB0b2xlcmFuY2UgPiAqYmVnaW4yKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKCpiZWdpbjEgKyB0b2xlcmFuY2UgPCAqYmVnaW4yKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoYmVnaW4yICE9IGVuZDIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlPGNsYXNzIGNvbnRhaW5lcjEsIGNsYXNzIGNvbnRhaW5lcjI+CmJvb2wgYWxtb3N0RXF1YWwoY29udGFpbmVyMSBsZWZ0LCBjb250YWluZXIyIHJpZ2h0LCBpbnQgdG9sZXJhbmNlKQp7IHJldHVybiBhbG1vc3RFcXVhbChsZWZ0LmJlZ2luKCksIGxlZnQuZW5kKCksIHJpZ2h0LmJlZ2luKCksIHJpZ2h0LmVuZCgpLCB0b2xlcmFuY2UpO30KCiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCmludCBtYWluKCkgewogICAgc3RkOjp2ZWN0b3I8aW50PiBhID0gezAsIDUsIDEwfTsKICAgIHN0ZDo6dmVjdG9yPGludD4gYiA9IHsxLCA0LCA4fTsKICAgIHN0ZDo6dmVjdG9yPGludD4gYyA9IHsyLCAyLCAxMH07CgogICAgc3RkOjpjb3V0IDw8IGFsbW9zdEVxdWFsKGEsIGIsIDIpIDw8ICdcbic7CiAgICBzdGQ6OmNvdXQgPDwgYWxtb3N0RXF1YWwoYSwgYywgMikgPDwgJ1xuJzsKICAgIHN0ZDo6Y291dCA8PCBhbG1vc3RFcXVhbChiLCBjLCAyKSA8PCAnXG4nOwp9