42-2-¸¶.¿ä¼Ò º¯°æ

transform ÇÔ¼ö´Â ¹Ýº¹ÀÚ ±¸°£¿¡ ´ëÇØ ÇÔ¼ö °´Ã¼¸¦ Àû¿ëÇÑ ÈÄ ±× °á°ú¸¦ ´Ù¸¥ ±¸°£¿¡ º¹»çÇÑ´Ù. ´ÜÇ× ÇÔ¼ö¸¦ ÃëÇÏ´Â ¹öÀü°ú ÀÌÇ× ÇÔ¼ö¸¦ ÃëÇÏ´Â ¹öÀü µÎ °¡Áö°¡ ÀÖ´Ù.

 

OutIt transform(InIt first, InIt last, OutIt result, UniOp op);

OutIt transform(InIt1 first1, InIt1 last1, InIt2 first2, OutIt result, BinOp op);

 

´ÜÇ× ÇÔ¼ö¸¦ ÃëÇÏ´Â ¹öÀüÀº ¹Ýº¹ÀÚ ±¸°£ÀÇ °¢ ¿ä¼Ò¸¦ ÀÌ ÇÔ¼ö·Î ³Ñ°Ü ¸®ÅÏµÈ °ªÀ» result ¹Ýº¹ÀÚ À§Ä¡¿¡ ´ëÀÔÇÑ´Ù. ÀÌÇ× ÇÔ¼ö¸¦ ÃëÇÏ´Â ¹öÀüÀº µÎ ¹Ýº¹ÀÚ ±¸°£ÀÇ ´ëÀÀµÇ´Â °ªÀ» ÇÔ¼ö·Î ³Ñ°Ü ¸®ÅϵǴ °ªÀ» result ¹Ýº¹ÀÚ À§Ä¡¿¡ ´ëÀÔÇÑ´Ù. ÇÑ ±¸°£¿¡ ´ëÇÑ ´Ü¼ø º¯È¯À» ÇÒ °ÍÀÎÁö ¾Æ´Ï¸é µÎ ±¸°£À» ÇÕÃļ­ º¯È¯À» ÇÒ °ÍÀÎÁö¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö´Â ó¸®ÇÑ °á°ú¸¦ Ç×»ó result·Î Ãâ·ÂÇϹǷΠ¿øº»ÀÌ ±×´ë·Î À¯ÁöµÈ´Ù. ¹°·Ð result°¡ ¿øº»ÀÌ µÉ ¼öµµ ÀÖ´Ù.

 

¿¹ Á¦ : transform

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

 

template<typename C> void dump(const char *desc, C c) { cout.width(12);cout << left << desc << "==> ";

      copy(c.begin(),c.end(),ostream_iterator<typename C::value_type>(cout," ")); cout << endl; }

 

int multi2(int a)

{

     return a*2;

}

 

int add(int a, int b)

{

     return a+b;

}

 

void main()

{

     vector<int> src(5), dest(5), sum;

     int i;

 

     for (i=0;i<5;i++) src[i]=i;

     transform(src.begin(),src.end(),dest.begin(),multi2);

     dump("src",src);

     dump("dest",dest);

     transform(src.begin(),src.end(),dest.begin(),back_inserter(sum),add);

     dump("sum",sum);

}

 

src º¤ÅÍ¿¡ 0 ~ 4±îÁöÀÇ Á¤¼ö¸¦ ÀúÀåÇÑ »óÅ¿¡¼­ Àüü ±¸°£¿¡ ´ëÇØ ´ÜÇ× multi2 ÇÔ¼ö °´Ã¼¸¦ Àû¿ëÇß´Ù. multi2 ÇÔ¼ö °´Ã¼´Â 0, 1, 2 °¢°¢À» ¹Þ¾Æ 0, 2, 4¸¦ ¸¸µé¾î ¸®ÅÏÇϸç transformÀº ±× °á°ú¸¦ destÀÇ ¹Ýº¹ÀÚ¿¡ ´ëÀÔÇÑ´Ù. dest¿¡´Â srcÀÇ 2¹èµÇ´Â °ªµéÀÌ ÀúÀåµÉ °ÍÀÌ´Ù.

´ÙÀ½À¸·Î ÀÌÇ× °´Ã¼¸¦ ÃëÇÏ´Â transform ÇÔ¼ö¸¦ È£ÃâÇÏ¿© src¿Í destÀÇ ´ëÀÀµÇ´Â ¿ä¼Ò¸¦ add ÇÔ¼ö °´Ã¼·Î ³Ñ°å´Ù. ÀÌ ÇÔ¼ö´Â Àμö·Î Àü´Þ¹ÞÀº µÎ °ªÀ» ´õÇÏ¿© ¸®ÅÏÇÏ¸ç ±× °á°ú´Â sum º¤ÅÍ¿¡ »ðÀԵȴÙ. »ðÀÔ ¹Ýº¹ÀÚ¸¦ »ç¿ëÇßÀ¸¹Ç·Î add°¡ ¸®ÅÏÇÑ °ªÀÌ sum º¤ÅÍ¿¡ »ðÀ﵃ °ÍÀÌ´Ù.

 

src         ==> 0 1 2 3 4

dest         ==> 0 2 4 6 8

sum         ==> 0 3 6 9 12

 

transform ÇÔ¼ö·Î º¤Åͳ¢¸® ¿¬»êÇߴµ¥ ù ¹ø° È£ÃâÀº dest=src*2¶ó°í ÇÒ ¼ö ÀÖ°í µÎ ¹ø° È£ÃâÀº sum=src+dest¶ó°í ÇÒ ¼ö ÀÖ´Ù. ¹°·Ð ÀÓÀÇÀÇ ÄÁÅ×À̳ʳ¢¸® Á¶ÇÕÇÏ¿© º¯È¯À» ÇÒ ¼öµµ ÀÖ´Ù.