40-2-³ª.»ðÀÔ, »èÁ¦

»ðÀÔ, »èÁ¦ ÇÔ¼öµµ º¤ÅÍ¿Í µ¿ÀÏÇÏ´Ù. ¸â¹ö ÇÔ¼öÀÇ À̸§»Ó¸¸ ¾Æ´Ï¶ó ¿øÇü±îÁö µ¿ÀÏÇÏ¸ç »ç¿ë ¹æ¹ýµµ ¹°·Ð ¶È°°´Ù.

 

iterator insert(iterator it, const T& x = T());

void insert(iterator it, size_type n, const T& x);

void insert(iterator it, const_iterator first, const_iterator last);

iterator erase(iterator it);

iterator erase(iterator first, iterator last);

 

´Ù¸¸ ó¸® ¼Óµµ´Â º¤Åͺ¸´Ù ÈξÀ ºü¸¥µ¥ À§Ä¡¿Í ¿ä¼Ò °³¼ö¿¡ »ó°ü¾øÀÌ »ó¼ö ½Ã°£³»¿¡ »ðÀÔ, »èÁ¦µÈ´Ù. ¼Óµµ°¡ ºü¸£´Ù´Â °Í ¿Ü¿¡µµ ¹Ýº¹ÀÚ°¡ ¹«È¿È­µÇÁö ¾Ê´Â ÀåÁ¡µµ ÀÖ´Ù. »ðÀÔ, »èÁ¦µÇ´Â ³ëµå¿Í ¾Õ µÚ ³ëµåÀÇ ¸µÅ©¸¸ ¹Ù²î¹Ç·Î ³ª¸ÓÁö ³ëµåµéÀº À§Ä¡¿¡ ÀüÇô º¯È­°¡ ¾ø´Ù. ´Ü, »èÁ¦µÇ´Â ³ëµåÀÇ ¹Ýº¹ÀÚ¸¸ ¿¹¿ÜÀûÀ¸·Î ¹«È¿È­µÈ´Ù. °£´ÜÇÑ ÇÔ¼öÁö¸¸ Àß µ¿ÀÛÇÏ´ÂÁö È®ÀÎÀº ÇØ ºÁ¾ß ÇϹǷΠ¿¹Á¦¸¸ ±¸°æÇØ º¸ÀÚ.

 

¿¹ Á¦ : listinsert

#include <iostream>

#include <list>

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()

{

     const char *str="abcdefghij";

     list<char> lc(&str[0],&str[10]);

     list<char>::iterator it;

 

     dump("ÃÖÃÊ",lc);

     it=lc.begin();it++;it++;it++;it++;it++;

     lc.insert(it,'Z');

     dump("Z »ðÀÔ",lc);

     it=lc.end();it--;it--;it--;

     lc.erase(it);

     dump("h»èÁ¦",lc);

}

 

¹®ÀÚÇüÀÇ ¸®½ºÆ® lc¸¦ ¼±¾ðÇÏ°í a ~ j±îÁö 10°³ÀÇ ¾ËÆĺª ¹®ÀÚ¸¦ ÀúÀåÇØ ³õ¾Ò´Ù. ½ÃÀÛ À§Ä¡¿¡¼­ ´Ù¼¸ ¹ø µÚ·Î À̵¿ÇÑ ÈÄ ÀÌ À§Ä¡¿¡ 'Z' ¹®ÀÚ¸¦ insert ÇÔ¼ö·Î »ðÀÔÇß´Ù. f¹®ÀÚ¾Õ¿¡ Z°¡ »ðÀ﵃ °ÍÀÌ´Ù. ±×¸®°í ³¡¿¡¼­ ¼¼Ä­ ¾ÕÂÊÀ¸·Î À̵¿ÇÑ ÈÄ erase ÇÔ¼ö·Î ÀÌ À§Ä¡¸¦ »èÁ¦Çß´Ù. ³¡¿¡¼­ ¼¼ ¹ø°¿¡´Â h¹®ÀÚ°¡ Àִµ¥ ÀÌ ¹®ÀÚ°¡ »èÁ¦µÉ °ÍÀÌ´Ù.

++À» ¿©·¯ ¹ø »ç¿ëÇÏ¿© À̵¿ÇÏ´Â °ÍÀÌ ¹«Ã´ ¸¶À½¿¡ ¾Èµé°ÚÁö¸¸ ¸®½ºÆ®ÀÇ ¹Ýº¹ÀÚ´Â ¾ç¹æÇ⠹ݺ¹ÀÚ°¡ ¾Æ´Ï¹Ç·Î it += 5 ¿¬»êÀ¸·Î ÇѲ¨¹ø¿¡ ´Ù¼¸ Ä­À» À̵¿ÇÒ ¼ö´Â ¾ø´Ù. ¾ç¹æÇ⠹ݺ¹ÀÚ´Â ¸µÅ©¸¦ µû¶ó Â÷·Ê´ë·Î À̵¿ÇÏ´Â ¼ö¹Û¿¡ ¾ø´Ù. ²À ÇÑ ¹ø¿¡ À̵¿ÇÏ°í ½Í´Ù¸é find ÇÔ¼ö·Î ¿øÇÏ´Â ¿ä¼Ò¸¦ °Ë»öÇؼ­ À̵¿Çϰųª advance ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö Àִµ¥ ÀÌ ÇÔ¼öµéµµ ¾îÂ÷ÇÇ ++À» ¿©·¯ ¹ø ¹Ýº¹ÇϹǷΠ¼Ò¿äµÇ´Â ½Ã°£Àº ¸¶Âù°¡ÁöÀÌ´Ù.

 

ÃÖÃÊ        ==> a b c d e f g h i j

Z »ðÀÔ      ==> a b c d e Z f g h i j

h»èÁ¦       ==> a b c d e Z f g i j

 

µ¿ÀÛÀº ¹°·Ð ÀßÇϴµ¥ ÀÌ ÂªÀº ¿¹Á¦¿¡¼­´Â ´À³¢±â ÈûµéÁö¸¸ »ðÀÔ, »èÁ¦ ¼Óµµ°¡ ¾öû³ª°Ô ºü¸£´Ù. ¿ä¼Ò°¡ ¾Æ¹«¸® ¸¹¾Æµµ, ¾î¶² À§Ä¡ÀÇ °ªÀ» »èÁ¦Çϳª Ç×»ó ÀÏÁ¤ÇÑ ½Ã°£³»¿¡¼­ ¿Ï·áÇÒ ¼ö ÀÖ´Ù. ƯÁ¤°ªÀ» °¡Áö´Â ¿ä¼Ò¸¦ ¸ðµÎ »èÁ¦ÇÏ°í ½ÍÀ» ¶§´Â ´ÙÀ½ ¸â¹ö ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.

 

void remove(const Type& val);

void remove_if(UniPred F)

 

remove´Â »èÁ¦ÇÒ °ªÀ» ¹Ù·Î ÁöÁ¤ÇÏ°í remove_if´Â Á¶°ÇÀÚ¿¡ ¸Â´Â ¿ä¼Ò¸¸ »èÁ¦ÇÑ´Ù. °ªÀ» °Ë»öÇÑ ÈÄ »èÁ¦ÇϹǷΠfind¿Í erase¸¦ ¼ø¼­´ë·Î ¼öÇàÇÑ´Ù°í »ý°¢ÇÏ¸é µÈ´Ù. ´ÙÀ½ ¿¹Á¦´Â ¹®ÀÚ ¸®½ºÆ®¿¡¼­ 'l'À» ã¾Æ ¸ðµÎ »èÁ¦ÇÑ´Ù.

 

¿¹ Á¦ : listremove

#include <iostream>

#include <list>

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()

{

     const char *str="double linked list class";

     list<char> li(&str[0],&str[strlen(str)]);

 

     dump("ÃÖÃÊ",li);

     li.remove('l');

     dump("l»èÁ¦",li);

}

 

¹®ÀÚµé Áß l¸¸ ¸ðÁ¶¸® »èÁ¦µÈ´Ù.

 

ÃÖÃÊ        ==> d o u b l e   l i n k e d   l i s t   c l a s s

l»èÁ¦       ==> d o u b e   i n k e d   i s t   c a s s

 

Á¶°ÇÀÚ ¹öÀüÀ» »ç¿ëÇϸé ÀÏÁ¤ÇÑ Á¶°ÇÀ» ¸¸Á·ÇÏ´Â ¿ä¼Ò¸¸ °ñ¶ó »èÁ¦ÇÒ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î ¸ðÀ½¸¸ »èÁ¦ÇѴٰųª °ø¹é¸¸ Á¦°ÅÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù. °°Àº À̸§ÀÇ Àü¿ª remove ¾Ë°í¸®Áòµµ Àִµ¥ ¸®½ºÆ®ÀÇ remove ¸â¹ö ÇÔ¼ö¿Í´Â µ¿ÀÛÇÏ´Â ¹æ½ÄÀÌ Á¶±Ý ´Ù¸£´Ù. ÀÌ Â÷ÀÌÁ¡¿¡ ´ëÇؼ­´Â ´ÙÀ½ Àå¿¡¼­ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ.