#include <iostream> // for std::cout and std::endl
#include <cstdio> // for getchar()
#include <memory> // for std::shared_ptr
#include <deque> // for std::deque
#include <algorithm> // for std::earse and std::remove_if
class A
{
private:
int _i;
double _d;
public:
A(int i, double d)
{
_i = i;
_d = d;
}
int geti()const
{
return _i;
}
double getValueOnWhichToCheck()const
{
return _d;
}
};
typedef std::shared_ptr<A> A_shared_ptr;
typedef std::deque<A_shared_ptr> list_type;
void PrintDeque(list_type & dq)
{
if (0 == dq.size())
{
std::cout << "Empty deque." << std::endl;
}
else
{
for (int i = 0 ; i < dq.size() ; ++i)
{
std::cout << i+1 << "\t" << dq[i] << std::endl;
}
}
}
class B
{
public:
double getThreshold() // Non constant for a reason as in real code it isn't
{
return 24.987; // comes from a calculation not needed here so I return a constant.
}
bool Predicate(const std::shared_ptr<A>& a)
{
return a->getValueOnWhichToCheck() >= getThreshold();
}
void DoStuff()
{
A_shared_ptr pT1 = std::make_shared<A>(A(2, -6.899987));
A_shared_ptr pT2 = std::make_shared<A>(A(876, 889.878762));
A_shared_ptr pT3 = std::make_shared<A>(A(-24, 48.98924));
A_shared_ptr pT4 = std::make_shared<A>(A(78, -6654.98980));
A_shared_ptr pT5 = std::make_shared<A>(A(6752, 3.141594209));
list_type dq = {pT1,pT2,pT3,pT4,pT5};
PrintDeque(dq);
dq.erase(std::remove_if(dq.begin(), dq.end(), std::bind(&B::Predicate, this, std::placeholders::_1)), dq.end());
PrintDeque(dq);
}
};
int main()
{
B * pB = new B();
pB->DoStuff();
getchar();
}
I2luY2x1ZGUgPGlvc3RyZWFtPiAvLyBmb3Igc3RkOjpjb3V0IGFuZCBzdGQ6OmVuZGwKI2luY2x1ZGUgPGNzdGRpbz4gLy8gZm9yIGdldGNoYXIoKQojaW5jbHVkZSA8bWVtb3J5PiAvLyBmb3Igc3RkOjpzaGFyZWRfcHRyCiNpbmNsdWRlIDxkZXF1ZT4gLy8gZm9yIHN0ZDo6ZGVxdWUKI2luY2x1ZGUgPGFsZ29yaXRobT4gLy8gZm9yIHN0ZDo6ZWFyc2UgYW5kIHN0ZDo6cmVtb3ZlX2lmCgpjbGFzcyBBCnsKICAgIHByaXZhdGU6CiAgICAgICAgaW50IF9pOwogICAgICAgIGRvdWJsZSBfZDsKICAgIHB1YmxpYzoKICAgICAgICBBKGludCBpLCBkb3VibGUgZCkKICAgICAgICB7CiAgICAgICAgICAgIF9pID0gaTsKICAgICAgICAgICAgX2QgPSBkOwogICAgICAgIH0KICAgICAgICBpbnQgZ2V0aSgpY29uc3QKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBfaTsKICAgICAgICB9CiAgICAgICAgZG91YmxlIGdldFZhbHVlT25XaGljaFRvQ2hlY2soKWNvbnN0CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gX2Q7CiAgICAgICAgfQp9OwoKdHlwZWRlZiBzdGQ6OnNoYXJlZF9wdHI8QT4gQV9zaGFyZWRfcHRyOwp0eXBlZGVmIHN0ZDo6ZGVxdWU8QV9zaGFyZWRfcHRyPiBsaXN0X3R5cGU7Cgp2b2lkIFByaW50RGVxdWUobGlzdF90eXBlICYgZHEpCnsKICAgIGlmICgwID09ICBkcS5zaXplKCkpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJFbXB0eSBkZXF1ZS4iIDw8IHN0ZDo6ZW5kbDsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBkcS5zaXplKCkgOyArK2kpCiAgICAgICAgewogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgaSsxIDw8ICJcdCIgPDwgZHFbaV0gPDwgc3RkOjplbmRsOwogICAgICAgIH0KICAgIH0KfQoKY2xhc3MgQgp7CiAgICBwdWJsaWM6CiAgICAgICAgZG91YmxlIGdldFRocmVzaG9sZCgpIC8vIE5vbiBjb25zdGFudCBmb3IgYSByZWFzb24gYXMgaW4gcmVhbCBjb2RlIGl0IGlzbid0CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gMjQuOTg3OyAvLyBjb21lcyBmcm9tIGEgY2FsY3VsYXRpb24gbm90IG5lZWRlZCBoZXJlIHNvIEkgcmV0dXJuIGEgY29uc3RhbnQuCiAgICAgICAgfQogICAgICAgIGJvb2wgUHJlZGljYXRlKGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxBPiYgYSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBhLT5nZXRWYWx1ZU9uV2hpY2hUb0NoZWNrKCkgPj0gZ2V0VGhyZXNob2xkKCk7CiAgICAgICAgfQogICAgICAgIHZvaWQgRG9TdHVmZigpCiAgICAgICAgewogICAgICAgICAgICBBX3NoYXJlZF9wdHIgcFQxID0gc3RkOjptYWtlX3NoYXJlZDxBPihBKDIsICAgICAgLTYuODk5OTg3KSk7CiAgICAgICAgICAgIEFfc2hhcmVkX3B0ciBwVDIgPSBzdGQ6Om1ha2Vfc2hhcmVkPEE+KEEoODc2LCAgICA4ODkuODc4NzYyKSk7CiAgICAgICAgICAgIEFfc2hhcmVkX3B0ciBwVDMgPSBzdGQ6Om1ha2Vfc2hhcmVkPEE+KEEoLTI0LCAgICA0OC45ODkyNCkpOwogICAgICAgICAgICBBX3NoYXJlZF9wdHIgcFQ0ID0gc3RkOjptYWtlX3NoYXJlZDxBPihBKDc4LCAgICAgLTY2NTQuOTg5ODApKTsKICAgICAgICAgICAgQV9zaGFyZWRfcHRyIHBUNSA9IHN0ZDo6bWFrZV9zaGFyZWQ8QT4oQSg2NzUyLCAgIDMuMTQxNTk0MjA5KSk7CiAgICAgICAgICAgIGxpc3RfdHlwZSBkcSA9IHtwVDEscFQyLHBUMyxwVDQscFQ1fTsKICAgICAgICAgICAgUHJpbnREZXF1ZShkcSk7CiAgICAgICAgICAgIGRxLmVyYXNlKHN0ZDo6cmVtb3ZlX2lmKGRxLmJlZ2luKCksIGRxLmVuZCgpLCBzdGQ6OmJpbmQoJkI6OlByZWRpY2F0ZSwgdGhpcywgc3RkOjpwbGFjZWhvbGRlcnM6Ol8xKSksIGRxLmVuZCgpKTsKICAgICAgICAgICAgUHJpbnREZXF1ZShkcSk7CiAgICAgICAgfQp9OwoKaW50IG1haW4oKQp7CiAgICBCICogcEIgPSBuZXcgQigpOwogICAgcEItPkRvU3R1ZmYoKTsKICAgIGdldGNoYXIoKTsKfQ==