Coding/CPP 삽질기2008. 10. 30. 23:57

#include <iostream>
#include <list>
using namespace std;

class CData {
public:
    CData (int x = 0) { data = x; }
    void set (int x) { data = x; }
    int  get (void)  { return data ; }
    // 방법 1: 비교를 위한 함수를 만든다.
    int operator()( CData &lhv, CData &rhv) const { return (lhv.get() > rhv.get()); }
    // 방법 2: < 연산자를 오버로딩 한다.
    int operator<( CData &rhv) const { return (this->data < rhv.get()); }
 
private:
    int data;       
};

void process(void);
void prinfList( list<CData> myList );


int main (int argc, char **argv)
{

    process();
   
    getchar();
    return 0;   
}


void process (void)
{
     list<CData> myData;

         
     myData.push_front(10);
     myData.push_front(17);
     myData.push_front(11);
     myData.push_front(1);
     myData.push_front(20);

     prinfList( myData );
 
     // STL의 list는 제너릭한 sort를 사용할 수 없다.
     // 멤버함수를 호출하면 < 연산자를 비교 함수로 쓴다.

     myData.sort();         // method 2
     prinfList( myData );
    // 직접 비교 함수를 넣을 수도 있다.
     myData.sort(CData()); // metod 1
     prinfList( myData );
}


void prinfList( list<CData> myList )
{
     list<CData> :: iterator iter;
    
     for (iter = myList.begin(); iter != myList.end(); iter++)
         cout << iter->get() << " ";
     cout << endl;
}

'Coding > CPP 삽질기' 카테고리의 다른 글

[CPP] Linux Thread Example Code  (0) 2008.12.14
Copy & Paste 신공  (0) 2008.03.08
연산자 우선 순위  (0) 2008.01.13
Posted by chobocho