42-2-´Ù.¿ä¼Ò Á¦°Å

¿ä¼Ò¸¦ Á¦°ÅÇÏ´Â ÇÔ¼ö´Â Á¶°Ç¿¡ ¸Â´Â ¿ä¼Ò¸¦ ã¾Æ Á¦°ÅÇÏ´Â ½Ã´¿À» ÇÑ´Ù. ½ÇÁ¦·Î ¿ä¼Ò¸¦ Á¦°ÅÇÏÁö´Â ¸øÇϴµ¥ ÀϹݼºÀ» °¡Áø ¾Ë°í¸®ÁòÀÌ ÄÁÅ×À̳ʸ¦ Á¶ÀÛÇÒ ±ÇÇÑÀÌ ¾ø±â ¶§¹®ÀÌ´Ù. ÀÚ¼¼ÇÑ ÀÌÀ¯´Â ¿¹Á¦¸¦ º¸¸é¼­ ¿¬±¸ÇØ º¸ÀÚ. Á¶°Ç¿¡ ¸Â´Â ¿ä¼Ò¸¦ Á¦°ÅÇÏ´Â remove ÇÔ¼ö´Â ´ÙÀ½ 4°¡Áö°¡ ÁغñµÇ¾î ÀÖ´Ù.

 

FwdIt remove(FwdIt first, FwdIt last, const Type& val);

FwdIt remove_if(FwdIt first, FwdIt last, UniPred F);

OutIt remove_copy(FwdIt first, FwdIt last, OutIt result, const Type& val);

OutIt remove_copy_if(FwdIt first, FwdIt last, OutIt result, UniPred F);

 

remove ÇÔ¼ö´Â ÀÛ¾÷ ´ë»óÀÌ µÇ´Â ¹Ýº¹ÀÚ ±¸°£°ú Á¦°ÅÇÒ °ªÀ» Àμö·Î Àü´Þ¹Þ¾Æ first ~ last »çÀÌÀÇ °ªÀ» Á¦°ÅÇÑ´Ù. ÀÌ ÇÔ¼ö´Â Á¦°Å ´ë»óÀ» ¼±ÅÃÇÒ ¶§ == ¿¬»êÀÚ·Î val°ú ÀÏÄ¡ÇÏ´Â ¿ä¼Ò¸¦ ¼±ÅÃÇϴµ¥ ºñÇØ remove_if´Â ´ÜÇ× Á¶°ÇÀÚ F°¡ true¸¦ ¸®ÅÏÇÏ´Â ¿ä¼Ò¸¦ ¼±ÅÃÇÑ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. ³ª¸ÓÁö µ¿ÀÛÀº µ¿ÀÏÇÏ´Ù.

remove´Â ½ÇÁ¦·Î ¿ä¼Ò¸¦ Á¦°ÅÇÏÁö´Â ¾ÊÀ¸¸ç Á¦°Å ´ë»óÀÌ ¾Æ´Ñ ¿ä¼ÒµéÀ» °ñ¶ó ±¸°£ÀÇ ¾ÕÂÊÀ¸·Î À̵¿½ÃŰ°í ³²Àº ¿ä¼ÒÀÇ ½ÃÀÛÀ» °¡¸®Å°´Â ¹Ýº¹ÀÚ¸¦ ¸®ÅÏÇÑ´Ù. Á¦°Å ´ë»óÀÌ ¾Æ´Ñ ¿ä¼ÒÀÇ ¿ø·¡ ¼ø¼­´Â À¯ÁöµÇ¹Ç·Î ¾ÈÁ¤¼ºÀÌ ÀÖ´Ù. ¿ä¼Ò°¡ ½ÇÁ¦·Î Á¦°ÅµÇÁö ¾Ê°í À§Ä¡¸¸ ¹Ù²î¹Ç·Î remove È£Ãâ ÈÄ¿¡µµ ÄÁÅ×À̳ÊÀÇ Å©±â´Â º¯ÇÏÁö ¾Ê´Â´Ù. ¿ä¼Ò¸¦ ½ÇÁ¦·Î Á¦°ÅÇÏ·Á¸é ÄÁÅ×À̳ÊÀÇ erase ¸â¹ö ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. µ¿ÀÛ ¹æ½ÄÀÌ »ó´çÈ÷ º¹ÀâÇѵ¥ ¿¹Á¦¸¦ ÅëÇØ ¿¬±¸ÇØ º¸ÀÚ.

 

¿¹ Á¦ : remove

#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; }

 

void main()

{

     int ari[]={3,1,4,1,5,9,2,6,5};

     vector<int> vi(&ari[0],&ari[sizeof(ari)/sizeof(ari[0])]);

     vector<int>::iterator it;

 

     dump("¿øº»",vi);

     it=remove(vi.begin(),vi.end(),1);

     dump("remove",vi);

     vi.erase(it,vi.end());

     dump("erase",vi);

}

 

Á¤¼ö º¤Å͸¦ Á¤ÀÇÇϰí ÀÌ º¤ÅÍ¿¡¼­ 1À» ¸ðµÎ Á¦°ÅÇØ º¸¾Ò´Ù. ÀÌ ÀÛ¾÷À» ÇÏ·Á¸é remove¿Í erase¸¦ °°ÀÌ È£ÃâÇØ¾ß ÇÑ´Ù. ½ÇÇà °á°úºÎÅÍ º¸ÀÚ.

 

¿øº»        ==> 3 1 4 1 5 9 2 6 5

remove      ==> 3 4 5 9 2 6 5 6 5

erase       ==> 3 4 5 9 2 6 5

 

remove È£Ãâ¿¡ ÀÇÇØ 1À» Á¦¿ÜÇÑ ¿ä¼ÒµéÀÌ ÀüºÎ ¾ÕÂÊÀ¸·Î À̵¿Çß´Ù. À̶§ À̵¿ÀÇ ³¡Á¡À̸鼭 ³²Àº ¿ä¼ÒÀÇ ½ÃÀÛÁ¡ÀÌ ¸®ÅϵȴÙ. ÀÌ µ¿ÀÛÀÌ ´Ù¼Ò ÀÌÇØÇϱ⠾î·Á¿îµ¥ remove ÇÔ¼öÀÇ ³»ºÎ µ¿ÀÛÀ» °üÂûÇØ º¸ÀÚ.

remove´Â ±¸°£ÀÇ Ã³À½ºÎÅÍ ¼øÈ¸Çϸ鼭 Á¦°Å ´ë»óÀÌ ¾Æ´Ñ ¿ä¼Ò¸¦ ¾ÕÂÊÀ¸·Î Â÷·Ê´ë·Î º¹»çÇÑ´Ù. ¼±µÎ°ªÀÎ 3Àº Á¦°Å ´ë»óÀÎ 1ÀÌ ¾Æ´Ï¹Ç·Î ±×´ë·Î ³²´Â´Ù. ´ÙÀ½°ª 1Àº Á¦°Å ´ë»óÀ̹ǷΠº¹»çµÇÁö ¾Ê´Â´Ù. ±× ´ÙÀ½°ª 4´Â 3´ÙÀ½À¸·Î º¹»çµÇ¸ç ±× ´ÙÀ½ 1Àº º¹»çµÇÁö ¾Ê´Â´Ù. ÀÌÈÄ 5, 9, 2, 6, 5´Â ¸ðµÎ 1ÀÌ ¾Æ´Ï¹Ç·Î Â÷·Ê´ë·Î ¾ÕÂÊÀ¸·Î À̵¿µÈ´Ù.

¿©±â±îÁö ÀÛ¾÷ÇÏ¸é µÚ¿¡ µÎ Ä­ÀÌ ³²´Âµ¥ ÀÌ À§Ä¡¸¦ °¡¸®Å°´Â ¹Ýº¹ÀÚ°¡ removeÀÇ °á°ú·Î ¸®ÅϵȴÙ. µÚ¿¡ ³²Àº 6°ú 5´Â ÀÌ¹Ì ¾ÕÂÊÀ¸·Î À̵¿µÇ¾úÀ¸¹Ç·Î Áö±Ý ÇöÀç·Î¼­´Â ¾²·¹±â°ªÀÎ ¼ÀÀÌ¸ç »èÁ¦µÈ 1ÀÌ ¿©±â¿¡ ¿Í ÀÖ´Ù°í º¸¸é µÈ´Ù. ±×·¯³ª remove´Â ±»ÀÌ 1À» µÚÂÊÀ¸·Î º¹»çÇÏÁö´Â ¾Ê´Âµ¥ ¿Ö³ÄÇϸé ÀÌ °ªÀº Àá½Ã Èĸé ÁøÂ¥ »èÁ¦µÇ±â ¶§¹®ÀÌ´Ù. remove°¡ ÀÌ·¸°Ô »èÁ¦ÇÒ °ª°ú ³²À» °ªÀ» Á¿ì·Î ºÐÇÒÇØ ³õÀ¸¸é ³ª¸ÓÁö ÀÛ¾÷Àº erase ¸â¹ö ÇÔ¼ö°¡ ó¸®Çϴµ¥ remove°¡ ¸®ÅÏÇÑ ¹Ýº¹ÀÚºÎÅÍ ³¡±îÁö¸¦ »èÁ¦ÇÏ¸é µÈ´Ù.

±×·¸´Ù¸é remove´Â ¿Ö ÀÌ·¸°Ô º¹ÀâÇÑ °úÁ¤À» °ÅÃļ­ ¿ä¼Ò¸¦ »èÁ¦Çϵµ·Ï µÇ¾î ÀÖÀ»±î? ±×³É 1À» »èÁ¦ÇØ ¹ö¸®°í 1ÀÌ ¾Æ´Ñ °Íµé¸¸ ³²°ÜµÐ´Ù¸é ±»ÀÌ erase¸¦ È£ÃâÇÒ Çʿ䰡 ¾øÁö ¾ÊÀº°¡? ÀÌ·¸°Ô µÇ¾î ÀÖ´Â ÀÌÀ¯´Â ¾î¶² ÀåÁ¡ÀÌ À־ ±×·± °ÍÀÌ ¾Æ´Ï¶ó ÀϹݼºÀ» °¡Áø ¾Ë°í¸®ÁòÀÌ ÇÒ ¼ö ÀÖ´Â µ¿ÀÛÀÌ Á¦ÇѵǾî Àֱ⠶§¹®ÀÌ´Ù. remove´Â Áö±Ý ÀÚ½ÅÀÌ °Ë»öÇϰí ÀÖ´Â ÄÁÅ×À̳ʰ¡ º¤ÅͶó´Â °ÍÀ» ¸ð¸£¸ç µû¶ó¼­ ½ÇÁ¦·Î ¿ä¼Ò¸¦ »èÁ¦Çϱâ À§ÇØ ¾î¶»°Ô ÄÁÅ×À̳ʸ¦ Á¶ÀÛÇØ¾ß ÇÏ´ÂÁöµµ ¾ËÁö ¸øÇÑ´Ù.

¸¸¾à remove°¡ Á¶ÀÛ ´ë»óÀÌ º¤ÅͶó´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù¸é 1ÀÌ ¹ß°ßµÉ ¶§¸¶´Ù ÀÌ ¿ä¼Ò¸¦ »èÁ¦ÇÏ°í µÚÂÊ ¿ä¼Ò¸¦ ¾ÕÀ¸·Î À̵¿½ÃŰ¸é µÉ °ÍÀÌ´Ù. ¹Ý¸é Á¶ÀÛ ´ë»óÀÌ ¸®½ºÆ®¶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù¸é 1À» Á¦°ÅÇÏ°í ¾çÂÊÀÇ ¸µÅ©¸¦ ¿¬°áÇÏ¸é µÈ´Ù. ÇÏÁö¸¸ remove´Â Á¶ÀÛ ´ë»ó ÄÁÅ×À̳ʰ¡ ¾î¶² ±¸Á¶¸¦ °¡Áö´ÂÁöµµ ¸ð¸£°í ¾î¶»°Ô Á¶ÀÛÇÏ´ÂÁöµµ ¾Ë ¼ö ¾øÀ¸¸ç ¿À·ÎÁö ¹Ýº¹ÀÚ·Î °ªÀ» ÀÐ°í ¾²°í ±³È¯ÇÏ´Â °Í¸¸ °¡´ÉÇÏ´Ù. ±×·¯´Ï remove°¡ ÇØ ÁÙ ¼ö ÀÖ´Â ÀÏÀº °íÀÛ »èÁ¦ ´ë»ó ¿ä¼Ò¿Í ±×·¸Áö ¾ÊÀº ¿ä¼Ò¸¦ ±¸ºÐÇØ ³õ°í ±× °æ°èÀÇ ¹Ýº¹ÀÚ¸¦ ¸®ÅÏÇÏ´Â °Í »ÓÀÌ´Ù.

½ÇÁ¦ »èÁ¦´Â ÇØ´ç ÄÁÅ×À̳ÊÀÇ erase ¸â¹ö ÇÔ¼ö°¡ ó¸®ÇØ¾ß ÇÑ´Ù. ¹Ý¸é ¸â¹ö ÇÔ¼ö´Â ÄÁÅ×À̳ʺ°·Î °íÀ¯Çϸç ÄÁÅ×À̳ÊÀÇ ±¸Á¶¸¦ ¾Ë°í ÀÖÀ¸¹Ç·Î ÁöÁ¤ÇÑ ¿ä¼Ò¸¦ »èÁ¦ÇÒ ¼ö ÀÖ´Ù. ¸®½ºÆ®ÀÇ remove ¸â¹ö ÇÔ¼ö´Â ¸â¹öÀ̹ǷΠ°Ë»ö°ú µ¿½Ã¿¡ »èÁ¦°¡ °¡´ÉÇÏ´Ù. Á» ºÒÆíÇϱâ´Â ÇÏÁö¸¸ ÀÌ·± ºÒÆíÇÔÀÇ ´ë°¡·Î ÀϹݼºÀÌ ¾ò¾îÁø´Ù. ¸¸¾à »èÁ¦ ´ë»óÀ» ¼±Á¤ÇÏ°í ½ÇÁ¦·Î »èÁ¦ÇÏ´Â °ÍÀÌ ¹ø°Å·Ó´Ù¸é »õ·Î¿î ÄÁÅ×À̳ʸ¦ »ý¼ºÇÏ´Â remove_copy ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.

 

¿¹ Á¦ : remove_copy

#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; }

 

void main()

{

     int ari[]={3,1,4,1,5,9,2,6,5};

     vector<int> vi(&ari[0],&ari[sizeof(ari)/sizeof(ari[0])]);

     vector<int> vi2;

 

     remove_copy(vi.begin(),vi.end(),back_inserter(vi2),1);

     dump("vi",vi);

     dump("vi2",vi2);

}

 

remove_copy´Â Á¦°Å ´ë»óÀ» Á¦¿ÜÇÑ ¿ä¼ÒµéÀ» »õ·Î¿î ¹Ýº¹ÀÚ ±¸°£¿¡ ´ëÀÔÇÑ´Ù. _copy°¡ µÚ¿¡ ºÙÀº ÇÔ¼ö´Â Ç×»ó ÀÛ¾÷ °á°ú¸¦ ´Ù¸¥ ±¸°£À¸·Î º¹»çÇÏ´Â ÇÔ¼öÀÌ´Ù. ÀÌ ÇÔ¼ö¿Í »ðÀÔ ¹Ýº¹ÀÚ¸¦ »ç¿ëÇÏ¸é ºó º¤ÅÍ¿¡ ¿øÇÏ´Â ¿ä¼Ò¸¸ ¸ðÀ» ¼ö ÀÖ´Ù.

 

vi          ==> 3 1 4 1 5 9 2 6 5

vi2         ==> 3 4 5 9 2 6 5

 

ÀÌ·¸°Ô ÇÏ¸é ¿øº»Àº ±×´ë·Î À¯ÁöÇÑ Ã¤·Î Á¦°Å°¡ ¿Ï·áµÈ »õ·Î¿î º¤ÅͰ¡ ÀÛ¼ºµÈ´Ù. remove´Â ÄÁÅ×À̳ʸ¦ Á¶ÀÛÇÏÁö´Â ¸øÇÏÁö¸¸ ÀÐÀ» ¼ö´Â ÀÖÀ¸¹Ç·Î Á¶°Ç¿¡ ¸Â´Â »õ·Î¿î ÄÁÅ×À̳ʸ¦ ¸¸µé ¼ö´Â ÀÖ´Ù. remove_copy ÇÔ¼ö´Â »ç½Ç»ó ´ÙÀ½ ÄÚµå¿Í µ¿ÀÏÇÏ´Ù.

 

vi2=vi;  // ¶Ç´Â copy(vi.begin(),vi.end(),back_inserter(vi2));

vi2.erase(remove(vi2.begin(),vi2.end(),1),vi2.end());

 

´ëÀÔÀ̳ª copy ÇÔ¼ö·Î ÀÏ´Ü ¶È°°Àº ÄÁÅ×À̳ʸ¦ ¸¸µç ÈÄ remove·Î ƯÁ¤ ¿ä¼Ò¸¦ Á¦°ÅÇÑ ÈÄ erase·Î ©¶ó³»¸é °á±¹ vi2¿¡´Â 1ÀÌ ¾Æ´Ñ ¿ä¼Ò¸¸ ³²´Â´Ù. ±×·¯³ª º¸´Ù½ÃÇÇ ÀÌ ¹æ¹ýÀº ´ëÀÔÀ̶ó´Â ºñ½Ñ ¿¬»êÀ» °ÅÃÄ¾ß ÇϹǷΠ´À¸®´Ù. º¹»ç ÇÔ¼ö´Â »õ·Î¿î ÄÁÅ×À̳ʸ¦ ¸¸µé¸é¼­ Á¦°Å¸¦ °âÇÒ ¼ö ÀÖ¾î º¹»ç ÈÄ Á¦°Åº¸´Ù ÈξÀ ´õ ºü¸£´Ù. ÀÌ·± ÀÌÀ¯·Î STLÀº ¾Ë°í¸®ÁòÀ» Àû¿ëÇϸ鼭 ±× °á°ú¸¦ ´Ù¸¥ ÄÁÅ×À̳ʿ¡ ÀÛ¼ºÇÏ´Â _copy ·ùÀÇ ÇÔ¼ö¸¦ Á¦°øÇÏ´Â °ÍÀÌ´Ù. ´ÙÀ½ ÇÔ¼öµµ ÀÏÁ¾ÀÇ Á¦°Å ÇÔ¼öÀε¥ µ¿ÀÛÇÏ´Â ¹æ½ÄÀº remove¿Í À¯»çÇÏ´Ù.

 

FwdIt unique(FwdIt first, FwdIt last [,BinPred F]);

OutIt unique(FwdIt first, FwdIt last, OutIt result [,BinPred F]);

 

unique ÇÔ¼ö´Â ¹Ýº¹ÀÚ ±¸°£¿¡¼­ ¿¬¼ÓµÈ Áߺ¹ ¿ä¼Ò¸¦ Á¦°ÅÇÑ´Ù. À̶§ Áߺ¹µÇ¾ú´Ù´Â Á¶°ÇÀÇ µðÆúÆ®´Â == ÀÌÁö¸¸ ÀÌÇ× Á¶°ÇÀÚ F·Î »ç¿ëÀÚ°¡ Áߺ¹ Á¶°ÇÀ» ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù. remove¿Í ¸¶Âù°¡Áö·Î ½ÇÁ¦·Î ¿ä¼Ò¸¦ »èÁ¦ÇÏÁö´Â ¾ÊÀ¸¸ç Áߺ¹µÇÁö ¾ÊÀº ¿ä¼Òµé¸¸ ¾ÕÂÊÀ¸·Î À̵¿½ÃŲ´Ù.

 

¿¹ Á¦ : unique

#include <iostream>

#include <algorithm>

using namespace std;

 

void main()

{

     char str[]="abcccddefggghi";

     char *p;

    

     puts(str);

     p=unique(&str[0],&str[strlen(str)]);

     *p=0;

     puts(str);

}

 

¹®ÀÚ ¹è¿­¿¡ Áߺ¹µÈ ¾ËÆÄºªÀ» ¿©·¯ °³ ½á ³õ°í unique·Î Áߺ¹À» Á¦°ÅÇØ º¸¾Ò´Ù. ±×¸®°í ¸®ÅÏµÈ ¹Ýº¹ÀÚ À§Ä¡¿¡ 0À» ´ëÀÔÇÏ¿© ³²Àº ¿ä¼Ò¸¦ Àß¶ó³½´Ù.

 

abcccddefggghi

abcdefghi

 

°¢ ¾ËÆÄºª ¹®ÀÚµéÀº Çϳª¾¿¸¸ ³²°í ³ª¸ÓÁö´Â ¸ðµÎ Á¦°ÅµÈ´Ù. ÁÖÀÇÇÒ °ÍÀº unique´Â ±¸°£³»ÀÇ Áߺ¹µÈ °ÍÀ» ¸ðµÎ Á¦°ÅÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ÀÎÁ¢µÈ Áߺ¹ ¿ä¼Ò¸¸ Á¦°ÅÇÑ´Ù´Â °ÍÀÌ´Ù. ¸Ö¸® ¶³¾îÁ®ÀÖ´Â Áߺ¹°ªÀº Á¦°ÅµÇÁö ¾Ê´Â´Ù. ¸¸¾à Áߺ¹µÈ ¸ðµç ¿ä¼Ò¸¦ ¿ÏÀüÈ÷ Á¦°ÅÇÏ°í ½Í´Ù¸é Á¤·ÄÀ» ¸ÕÀú ÇÑ ÈÄ unique¸¦ Àû¿ëÇØ¾ß ÇÑ´Ù. unique_copy´Â Áߺ¹µÇÁö ¾ÊÀº ¿ä¼Ò¸¦ ´Ù¸¥ ÄÁÅ×À̳ʷΠº¹»çÇÑ´Ù.