для примера:
Код | #include <iostream> #include <list> #include <string> #include <algorithm>
struct STUDENT { std::string name; std::string group; std::string mark; } g_SampleInit[] = { { "Petrov", "2121", "ud" }, { "Ivanov", "1212", "neud" }, { "Sidorova", "3211","ud" }, { "sidorova", "3211","ud" }, { "Sidorov", "3211", "neud" } };
int g_iSampleSize = sizeof( g_SampleInit ) / sizeof( g_SampleInit[0] );
void PrintStudent( const STUDENT &stud ); bool LessName( const STUDENT &stud1, const STUDENT &stud2 );
class PrintIfNameContain //просто декларация class PrintIfNameContain; что-то не катит :( { private: std::string m_str; public: PrintIfNameContain( const std::string &str ) : m_str( str ) { }
void operator ( ) ( const STUDENT &stud ) { if( std::string::npos != stud.name.find( m_str ) ) PrintStudent( stud ); } };
int main(int argc, char* argv[]) { std::list< STUDENT > listStud( &g_SampleInit[0], &g_SampleInit[g_iSampleSize] ); std::cout<<"Initial list:\n"; std::for_each( listStud.begin(), listStud.end(), PrintStudent );
listStud.sort( LessName ); std::cout<<"\nSorted list:\n"; std::for_each( listStud.begin(), listStud.end(), PrintStudent ); std::cout<<"\nPrint all, with \"dor\" in name:\n"; std::for_each( listStud.begin(), listStud.end(), PrintIfNameContain( "dor" ) );
std::cin.get(); return 0; }
bool LessName( const STUDENT &stud1, const STUDENT &stud2 ) { return std::lexicographical_compare( &stud1.name[0], &stud1.name[stud1.name.length()], &stud2.name[0], &stud2.name[stud2.name.length()] ); }
void PrintStudent( const STUDENT &stud ) { std::cout<<stud.name<<" "<<stud.group<<" "<<stud.mark<<'\n'; }
|
|