template <typename InIter1, typename InIter2, typename OutIter>
OutIter set_difference(InIter1 first1, InIter1 last1, InIter2 first2, InIter2 last2, OutIter out) {
while (first1 != last1 and first2 != last2) {
if (*first1 < *first2) {
*out = *first1;
++first1;
++out;
} else if (*first1 > *first2) {
*out = *first2;
++first2;
++out;
} else {
++first1;
++first2;
}
}
//
while (first1 == last1 and first2 != last2) {
*out = *first2;
++first2;
++out;
}
//
while (first1 != last1 and first2 == last2) {
*out = *first1;
++first1;
++out;
}
return out;
}
#include <vector>
#include <iostream>
int main () {
int first[] = {1, 2, 3};
int second[] = {2, 4, 6, 8};
std::vector<int> v(7); // 0 0 0 0 0 0 0 0 0 0
std::vector<int>::iterator it;
//std::sort (first,first+5); // 5 10 15 20 25
//std::sort (second,second+5); // 10 20 30 40 50
it=std::set_difference (first, first+3, second, second+4, v.begin());
// 5 15 25 0 0 0 0 0 0 0
v.resize(it-v.begin()); // 5 15 25
std::cout << "The difference has " << (v.size()) << " elements:\n";
for (it=v.begin(); it!=v.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
dGVtcGxhdGUgPHR5cGVuYW1lIEluSXRlcjEsIHR5cGVuYW1lIEluSXRlcjIsIHR5cGVuYW1lIE91dEl0ZXI+Ck91dEl0ZXIgc2V0X2RpZmZlcmVuY2UoSW5JdGVyMSBmaXJzdDEsIEluSXRlcjEgbGFzdDEsIEluSXRlcjIgZmlyc3QyLCBJbkl0ZXIyIGxhc3QyLCBPdXRJdGVyIG91dCkgewogICAgd2hpbGUgKGZpcnN0MSAhPSBsYXN0MSBhbmQgZmlyc3QyICE9IGxhc3QyKSB7CiAgICAgICAgaWYgKCpmaXJzdDEgPCAqZmlyc3QyKSB7CiAgICAgICAgICAgICpvdXQgPSAqZmlyc3QxOwogICAgICAgICAgICArK2ZpcnN0MTsKICAgICAgICAgICAgKytvdXQ7CiAgICAgICAgfSBlbHNlIGlmICgqZmlyc3QxID4gKmZpcnN0MikgewogICAgICAgICAgICAqb3V0ID0gKmZpcnN0MjsKICAgICAgICAgICAgKytmaXJzdDI7CiAgICAgICAgICAgICsrb3V0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICsrZmlyc3QxOwogICAgICAgICAgICArK2ZpcnN0MjsKICAgICAgICB9CiAgICB9CiAgICAvLwogICAgd2hpbGUgKGZpcnN0MSA9PSBsYXN0MSBhbmQgZmlyc3QyICE9IGxhc3QyKSB7CiAgICAgICAgKm91dCA9ICpmaXJzdDI7CiAgICAgICAgKytmaXJzdDI7CiAgICAgICAgKytvdXQ7CiAgICB9CiAgICAvLwogICAgd2hpbGUgKGZpcnN0MSAhPSBsYXN0MSBhbmQgZmlyc3QyID09IGxhc3QyKSB7CiAgICAgICAgKm91dCA9ICpmaXJzdDE7CiAgICAgICAgKytmaXJzdDE7CiAgICAgICAgKytvdXQ7CiAgICB9CiAgICByZXR1cm4gb3V0Owp9CgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aW9zdHJlYW0+CgppbnQgbWFpbiAoKSB7CiAgICBpbnQgZmlyc3RbXSA9IHsxLCAyLCAzfTsKICAgIGludCBzZWNvbmRbXSA9IHsyLCA0LCA2LCA4fTsKICAgIHN0ZDo6dmVjdG9yPGludD4gdig3KTsgICAgICAgICAgICAgICAgICAgICAgLy8gMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAgMAogICAgc3RkOjp2ZWN0b3I8aW50Pjo6aXRlcmF0b3IgaXQ7CiAgICAKICAgIC8vc3RkOjpzb3J0IChmaXJzdCxmaXJzdCs1KTsgICAgIC8vICA1IDEwIDE1IDIwIDI1CiAgICAvL3N0ZDo6c29ydCAoc2Vjb25kLHNlY29uZCs1KTsgICAvLyAxMCAyMCAzMCA0MCA1MAogICAgCiAgICBpdD1zdGQ6OnNldF9kaWZmZXJlbmNlIChmaXJzdCwgZmlyc3QrMywgc2Vjb25kLCBzZWNvbmQrNCwgdi5iZWdpbigpKTsKICAgIC8vICA1IDE1IDI1ICAwICAwICAwICAwICAwICAwICAwCiAgICB2LnJlc2l6ZShpdC12LmJlZ2luKCkpOyAgICAgICAgICAgICAgICAgICAgICAvLyAgNSAxNSAyNQogICAgCiAgICBzdGQ6OmNvdXQgPDwgIlRoZSBkaWZmZXJlbmNlIGhhcyAiIDw8ICh2LnNpemUoKSkgPDwgIiBlbGVtZW50czpcbiI7CiAgICBmb3IgKGl0PXYuYmVnaW4oKTsgaXQhPXYuZW5kKCk7ICsraXQpCiAgICAgICAgc3RkOjpjb3V0IDw8ICcgJyA8PCAqaXQ7CiAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKICAgIAogICAgcmV0dXJuIDA7Cn0K
prog.cpp: In function ‘int main()’:
prog.cpp:44:8: error: ‘set_difference’ is not a member of ‘std’
it=std::set_difference (first, first+3, second, second+4, v.begin());
^~~
prog.cpp:44:8: note: suggested alternative:
prog.cpp:2:9: note: ‘set_difference’
OutIter set_difference(InIter1 first1, InIter1 last1, InIter2 first2, InIter2 last2, OutIter out) {
^~~~~~~~~~~~~~