■
こんくらいスラスラ出てくるようにしたい。
#include <iostream> #include <vector> class CPoint { public: CPoint(double Distance) : m_Distance(Distance) { }; double m_Distance; }; class CMaxGetter { public: CPoint* operator()(CPoint* lhs, CPoint* rhs) const { return (lhs->m_Distance < rhs->m_Distance) ? rhs : lhs; }; }; class CMinGetter { public: CPoint* operator()(CPoint* lhs, CPoint* rhs) const { return (lhs->m_Distance > rhs->m_Distance) ? rhs : lhs; }; }; template<class T> class CPointerContainer : public std::vector<T*> { public: virtual ~CPointerContainer() { for(size_t i = 0; i < this->size(); ++i) { delete (*this)[i]; } }; template<class Pred> T* GetPoint(Pred& pred) { if(this->empty()) { return NULL; } CPointerContainer::iterator it = this->begin(); CPointerContainer::iterator it_end = this->end(); T* Ptr = (*it); for(++it; it != it_end; ++it) { Ptr = pred(Ptr, *it); } return Ptr; }; }; int main() { CPointerContainer<CPoint> vec; for(size_t i = 0; i < 10; ++i) { vec.push_back(new CPoint(i)); } CPoint* pMax = vec.GetPoint(CMaxGetter()); CPoint* pMin = vec.GetPoint(CMinGetter()); std::cout << "Max : " << pMax->m_Distance << std::endl; std::cout << "Min : " << pMin->m_Distance << std::endl; return 0; };