#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
#include <iterator>
typedef std::vector<std::string> String1D;
typedef std::vector<String1D> String2D;
using namespace std;
int main()
{
// create array C0
String2D masiv_C0(3, String1D(2));
masiv_C0[0][0]="AB";
masiv_C0[0][1]="C";
masiv_C0[1][0]="X";
masiv_C0[1][1]="Z";
masiv_C0[2][0]="XY";
masiv_C0[2][1]="ZQ";
//create array X0
String2D masiv_X0(1, String1D(2));
masiv_X0[0][0]="X";
masiv_X0[0][1]="Z";
//create array Y1 = C0 - X0 (remove from C0 elements X0)
String2D masiv_Y1 = masiv_C0;
for ( size_t i = 0; i < masiv_X0.size(); ++i)
{
for ( size_t j = 0; j < masiv_X0[i].size(); ++j)
{
auto& str = masiv_X0[i][j];
for (size_t cur = 0; cur < masiv_Y1.size(); ++cur)
{
auto iter = std::remove(masiv_Y1[cur].begin(), masiv_Y1[cur].end(), str);
masiv_Y1[cur].erase(iter, masiv_Y1[cur].end());
}
}
}
String2D::iterator iter = masiv_Y1.begin();
while (iter != masiv_Y1.end())
{
std::copy((*iter).begin(), (*iter).end(), std::ostream_iterator<std::string>(cout, " "));
cout << "\n";
++iter;
}
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8aXRlcmF0b3I+Cgp0eXBlZGVmIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBTdHJpbmcxRDsKdHlwZWRlZiBzdGQ6OnZlY3RvcjxTdHJpbmcxRD4gU3RyaW5nMkQ7Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKQp7CgkvLyBjcmVhdGUgYXJyYXkgQzAKCVN0cmluZzJEIG1hc2l2X0MwKDMsIFN0cmluZzFEKDIpKTsKCW1hc2l2X0MwWzBdWzBdPSJBQiI7CgltYXNpdl9DMFswXVsxXT0iQyI7CgltYXNpdl9DMFsxXVswXT0iWCI7CgltYXNpdl9DMFsxXVsxXT0iWiI7CgltYXNpdl9DMFsyXVswXT0iWFkiOwoJbWFzaXZfQzBbMl1bMV09IlpRIjsKCgkvL2NyZWF0ZSBhcnJheSBYMCAKCVN0cmluZzJEIG1hc2l2X1gwKDEsIFN0cmluZzFEKDIpKTsKCW1hc2l2X1gwWzBdWzBdPSJYIjsKCW1hc2l2X1gwWzBdWzFdPSJaIjsKCgkvL2NyZWF0ZSBhcnJheSBZMSA9IEMwIC0gWDAgKHJlbW92ZSBmcm9tIEMwIGVsZW1lbnRzIFgwKQoJU3RyaW5nMkQgbWFzaXZfWTEgPSBtYXNpdl9DMDsKCWZvciAoIHNpemVfdCBpID0gMDsgaSA8IG1hc2l2X1gwLnNpemUoKTsgKytpKQoJewoJCWZvciAoIHNpemVfdCBqID0gMDsgaiA8IG1hc2l2X1gwW2ldLnNpemUoKTsgKytqKQoJCXsKCQkJYXV0byYgc3RyID0gbWFzaXZfWDBbaV1bal07CgkJCWZvciAoc2l6ZV90IGN1ciA9IDA7IGN1ciA8IG1hc2l2X1kxLnNpemUoKTsgKytjdXIpCgkJCXsKCQkJCWF1dG8gaXRlciA9IHN0ZDo6cmVtb3ZlKG1hc2l2X1kxW2N1cl0uYmVnaW4oKSwgbWFzaXZfWTFbY3VyXS5lbmQoKSwgc3RyKTsKCQkJCW1hc2l2X1kxW2N1cl0uZXJhc2UoaXRlciwgbWFzaXZfWTFbY3VyXS5lbmQoKSk7CgkJCX0KCQl9Cgl9CgoJU3RyaW5nMkQ6Oml0ZXJhdG9yIGl0ZXIgPSBtYXNpdl9ZMS5iZWdpbigpOwoJd2hpbGUgKGl0ZXIgIT0gbWFzaXZfWTEuZW5kKCkpCgl7CgkJc3RkOjpjb3B5KCgqaXRlcikuYmVnaW4oKSwgKCppdGVyKS5lbmQoKSwgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPHN0ZDo6c3RyaW5nPihjb3V0LCAiICIpKTsKCQljb3V0IDw8ICJcbiI7CgkJKytpdGVyOwoJfQp9