#include <algorithm> // for std::remove_if()
#include <iostream> // for std::cout, std::endl
#include <string> // for std::string
#include <vector> // for std::vector
using namespace std;
void print(const char* name, const vector<string>& v);
int main()
{
// Input vectors
vector<string> a = {"the", "of"};
vector<string> b = {"oranges", "the", "of", "apples"};
print("a", a);
print("b", b);
// Use the erase-remove idiom
a.erase(
remove_if(
a.begin(),
a.end(),
// This lambda returns true if current string 's'
// (from vector 'a') is in vector 'b'.
[&b](const string& s)
{
auto it = find(b.begin(), b.end(), s);
return (it != b.end());
}
),
a.end()
);
cout << "\nAfter removing:\n";
print("a", a);
}
void print(const char* name, const vector<string>& v)
{
cout << name << " = {";
bool first = true;
for (const auto& s : v)
{
if (first)
{
first = false;
cout << s;
}
else
{
cout << ", " << s;
}
}
cout << "}" << endl;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4gICAgLy8gZm9yIHN0ZDo6cmVtb3ZlX2lmKCkKI2luY2x1ZGUgPGlvc3RyZWFtPiAgICAgLy8gZm9yIHN0ZDo6Y291dCwgc3RkOjplbmRsCiNpbmNsdWRlIDxzdHJpbmc+ICAgICAgIC8vIGZvciBzdGQ6OnN0cmluZwojaW5jbHVkZSA8dmVjdG9yPiAgICAgICAvLyBmb3Igc3RkOjp2ZWN0b3IKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgcHJpbnQoY29uc3QgY2hhciogbmFtZSwgY29uc3QgdmVjdG9yPHN0cmluZz4mIHYpOwoKaW50IG1haW4oKSAKewogICAgLy8gSW5wdXQgdmVjdG9ycwogICAgdmVjdG9yPHN0cmluZz4gYSA9IHsidGhlIiwgIm9mIn07CiAgICB2ZWN0b3I8c3RyaW5nPiBiID0geyJvcmFuZ2VzIiwgInRoZSIsICJvZiIsICJhcHBsZXMifTsKCiAgICBwcmludCgiYSIsIGEpOwogICAgcHJpbnQoImIiLCBiKTsKCiAgICAvLyBVc2UgdGhlIGVyYXNlLXJlbW92ZSBpZGlvbQogICAgYS5lcmFzZSgKICAgICAgICByZW1vdmVfaWYoCiAgICAgICAgICAgIGEuYmVnaW4oKSwgCiAgICAgICAgICAgIGEuZW5kKCksIAoKICAgICAgICAgICAgLy8gVGhpcyBsYW1iZGEgcmV0dXJucyB0cnVlIGlmIGN1cnJlbnQgc3RyaW5nICdzJwogICAgICAgICAgICAvLyAoZnJvbSB2ZWN0b3IgJ2EnKSBpcyBpbiB2ZWN0b3IgJ2InLiAKICAgICAgICAgICAgWyZiXShjb25zdCBzdHJpbmcmIHMpIAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhdXRvIGl0ID0gZmluZChiLmJlZ2luKCksIGIuZW5kKCksIHMpOwogICAgICAgICAgICAgICAgcmV0dXJuIChpdCAhPSBiLmVuZCgpKTsKICAgICAgICAgICAgfQogICAgICAgICksIAoKICAgICAgICBhLmVuZCgpCiAgICApOwoKICAgIGNvdXQgPDwgIlxuQWZ0ZXIgcmVtb3Zpbmc6XG4iOwogICAgcHJpbnQoImEiLCBhKTsKfQoKCnZvaWQgcHJpbnQoY29uc3QgY2hhciogbmFtZSwgY29uc3QgdmVjdG9yPHN0cmluZz4mIHYpIAp7CiAgICBjb3V0IDw8IG5hbWUgPDwgIiA9IHsiOwogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBmb3IgKGNvbnN0IGF1dG8mIHMgOiB2KSAKICAgIHsKICAgICAgICBpZiAoZmlyc3QpIAogICAgICAgIHsKICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgICAgICAgY291dCA8PCBzOwogICAgICAgIH0gCiAgICAgICAgZWxzZSAKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgIiwgIiA8PCBzOwogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgIn0iIDw8IGVuZGw7Cn0K