for_each

stlÀÇ ÄÁÅ×À̳ʠ¼øȸ ÇÔ¼öÀÎ for_each »ç¿ë¹ý¿¡ ´ëÇؼ­ ¾Ë¾Æº¸ÀÚ.

for_each¸¦ »ç¿ëÇÒ·Á¸é algorithm Çì´õ¸¦ Æ÷ÇÔÇÑ´Ù.
»ç¿ë¹ýÀº 3¹ø° ÀÎÀÚ¸¦ ÇÔ¼ö, ¸â¹öÇÔ¼ö, ÇÔ¼ö°´Ã¼¸¦ ³Ñ°ÜÁÖ´Â ¼¼ °¡Áö ¹æ¹ýÀÌ ÀÖ´Ù.

1. ÇÔ¼ö Àü´Þ

#include <iostream>

#include <vector>

#include <algorithm>

#include <conio.h>

 

class Object

{

public:

    Object(int n)

    {

        m_num = n;

    }

 

    int m_num;

};

 

 

std::vector<Object> gObjects;

 

void Display(Object& obj)

{

    std::cout << "Object::m_num :  " << obj.m_num << std::endl;

}

 

void main()

{

    for(int n = 0; n < 10; ++n)

    {

        Object obj(n);

        gObjects.push_back(obj);

    }

    std::for_each( gObjects.begin(), gObjects.end(), Display);

    _getch();

}

3¹ø° ÀÎÀÚ¸¦ ÇÔ¼ö·Î ³Ñ°ÜÁØ´Ù.

std::for_each( gObjects.begin(), gObjects.end(), Display)

 

2. ¸â¹öÇÔ¼ö¸¦ Àü´Þ

#include <iostream>

#include <vector>

#include <algorithm>

#include <conio.h>

#include <functional>

 

class Object

{

public:

    Object(int n)

    {

        m_num = n;

    }

 

    void Show()

    {

        std::cout << "Object::m_num :  " << m_num << std::endl;

    }

 

    int m_num;

};

 

 

std::vector<Object> gObjects;

 

 

void main()

{

    for(int n = 0; n < 10; ++n)

    {

        Object obj(n);

        gObjects.push_back(obj);

    }

    std::for_each( gObjects.begin(), gObjects.end(), std::mem_fun_ref(&Object::Show));

    _getch();

}

mem_fun_ref¸¦ ÀÌ¿ëÇØ ¸â¹öº¯¼ö¸¦ ³Ñ°ÜÁØ´Ù.
mem_fun_ref¸¦ »ç¿ëÇϱâ À§Çؼ­´Â functional Çì´õ¸¦ Æ÷ÇÔÇØ¾ß ÇÑ´Ù.

for_each( gObjects.begin(), gObjects.end(), std::mem_fun_ref(&Object::Show))

 

3. ÇÔ¼ö°´Ã¼ Àü´Þ

#include <iostream>

#include <vector>

#include <algorithm>

 

 

class Object

{

public:

    Object(int n)

    {

        m_num = n;

    }

 

    int m_num;

};

 

class Show

{

public:

    void operator()(Object& obj) const

    {

        std::cout << "Object::m_num :  " << obj.m_num << std::endl;

    }

};

 

std::vector<Object> gObjects;

 

 

void main()

{

    for(int n = 0; n < 10; ++n)

    {

        Object obj(n);

        gObjects.push_back(obj);

    }

 

    std::for_each( gObjects.begin(), gObjects.end(), Show());

    system("pause");

}

ShowŬ·¡½ºÀÇ operator¸¦ ÀÌ¿ëÇÏ¿© Àü´ÞÇÏ°í ÀÖ´Ù.

 

4. ÅÛÇø´ »ç¿ë

#include <iostream>

#include <vector>

#include <algorithm>

 

template< class T >

class Object

{

public:

    Object(T n)

    {

        m_num = n;

    }

 

    T m_num;

};

 

template< class K >

class Show

{

public:

    void operator()(Object<K>& obj) const

    {

        std::cout << "Object::m_num :  " << obj.m_num << std::endl;

    }

};

 

 

typedef int DataType;

std::vector<Object<DataType>> gObjects;

 

 

void main()

{

    for(int n = 0; n < 10; ++n)

    {

        Object<DataType> obj((DataType)n);

        gObjects.push_back(obj);

    }

 

    std::for_each( gObjects.begin(), gObjects.end(), Show<DataType>());

    system("pause");

}