| Код | #include <iostream> #include <vector> #include <algorithm>
#ifdef __BORLANDC__ #include <conio> #endif
class Passenger { int stuff_; float weight_; public : Passenger( int stuff = 0, float weight = 0 ) : stuff_(stuff), weight_(weight) {}
int getStuff ( void ) const { return stuff_; } float getWeight( void ) const { return weight_; }
void setStuff ( int stuff ) { stuff_ = stuff; } void setWeight ( float weight ) { weight_ = weight; } };
class CmpStuff : public std::binary_function<Passenger, int, bool> { public : bool operator()( const Passenger &lhs, int Sutff ) { return lhs.getStuff() < Sutff; } };
class AccumulateMiddleStuff // Функтор, считающий среднее кол-во вещей. : public std::unary_function<Passenger, void> { int total_passengers; int total_stuff; public : AccumulateMiddleStuff( void ) : total_passengers(0), total_stuff(0) {} void operator()( const Passenger &p ) { total_passengers++; total_stuff += p.getStuff(); }
float result( void ) const { return (total_passengers) ? (total_stuff / total_passengers) : 0; }
};
int main(int argc, char* argv[]) { typedef std::vector<Passenger> Vec; Vec vec(10);
// Заполняем вектор пассажиров значениями. for( int i = 0; i < 10; ++i ) { vec[i].setStuff(i); vec[i].setWeight(i*1.1); }
Vec::size_type less_than_two = std::count_if( vec.begin(), vec.end(), std::bind2nd( CmpStuff(), 2 ) );
Vec::size_type more_than_middle = std::count_if( vec.begin(), vec.end(), std::bind2nd( CmpStuff(), std::for_each( vec.begin(), vec.end(), AccumulateMiddleStuff() ).result() ) );
std::cout << "Пассажиров с кол-вом вещей, меньшим " "чем 2 = " << less_than_two << std::endl;
std::cout << "Пассажиров, количество вещей которых превосходит среднее " "число вещей = " << more_than_middle << std::endl;
#ifdef __BORLANDC__ getch(); #endif
return 0; }
|
PS - опоздали - бедная девочка провалила экзамен (наверное). А жаль. |