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");
}
|
|