#include <iostream>
#include <vector>
#include <memory>
#include <algorithm>
struct someType {
int value;
someType(int val) : value(val) {}
};
int main() {
std::vector<int> condition;
std::vector<std::shared_ptr<someType>> container;
condition.push_back(0);
condition.push_back(1);
condition.push_back(0);
container.emplace_back(std::make_shared<someType>(1));
container.emplace_back(std::make_shared<someType>(2));
container.emplace_back(std::make_shared<someType>(3));
container.erase(
std::remove_if(
container.begin(), container.end(),
[&](const std::shared_ptr<someType> &s) {
return condition[ &s - &(*container.begin()) ] == 1;
}
),
container.end()
);
for(auto &s : container)
std::cout << s->value << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKc3RydWN0IHNvbWVUeXBlIHsKICBpbnQgdmFsdWU7CiAgc29tZVR5cGUoaW50IHZhbCkgOiB2YWx1ZSh2YWwpIHt9Cn07CgppbnQgbWFpbigpIHsKICBzdGQ6OnZlY3RvcjxpbnQ+IGNvbmRpdGlvbjsKICBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8c29tZVR5cGU+PiBjb250YWluZXI7CgogIGNvbmRpdGlvbi5wdXNoX2JhY2soMCk7CiAgY29uZGl0aW9uLnB1c2hfYmFjaygxKTsKICBjb25kaXRpb24ucHVzaF9iYWNrKDApOwoKICBjb250YWluZXIuZW1wbGFjZV9iYWNrKHN0ZDo6bWFrZV9zaGFyZWQ8c29tZVR5cGU+KDEpKTsKY29udGFpbmVyLmVtcGxhY2VfYmFjayhzdGQ6Om1ha2Vfc2hhcmVkPHNvbWVUeXBlPigyKSk7CmNvbnRhaW5lci5lbXBsYWNlX2JhY2soc3RkOjptYWtlX3NoYXJlZDxzb21lVHlwZT4oMykpOwoKICBjb250YWluZXIuZXJhc2UoCiAgICBzdGQ6OnJlbW92ZV9pZigKICAgICAgY29udGFpbmVyLmJlZ2luKCksIGNvbnRhaW5lci5lbmQoKSwKICAgICAgWyZdKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxzb21lVHlwZT4gJnMpIHsKICAgICAgcmV0dXJuIGNvbmRpdGlvblsgJnMgLSAmKCpjb250YWluZXIuYmVnaW4oKSkgXSA9PSAxOwogICAgICB9CiAgICApLAogICAgY29udGFpbmVyLmVuZCgpCiAgKTsKCiAgZm9yKGF1dG8gJnMgOiBjb250YWluZXIpCiAgICBzdGQ6OmNvdXQgPDwgcy0+dmFsdWUgPDwgc3RkOjplbmRsOwoKICByZXR1cm4gMDsKfQ==