#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==