¿ä¼Ò Àç¹èÄ¡ ÇÔ¼öµéÀº ±¸°£ÀÇ ¿ä¼ÒµéÀ» ƯÁ¤ÇÑ ´Ù¸¥ °ªÀ¸·Î ¹Ù²Ù°Å³ª ¿ä¼Ò³¢¸® ±³È¯ÇÔÀ¸·Î½á À§Ä¡¸¦ º¯°æÇÑ´Ù. ´Ù¾çÇÑ ¿øÇüÀÌ ÀÖÁö¸¸ ÀÏ´Ü ±âº»ÇüÀÇ ¿øÇüÀ» º¸ÀÚ.
void replace (FwdIt first, FwdIt last, const Type& Old, const Type& New);
void reverse(BiIt first, BiIt last);
void rotate(FwdIt first, FwdIt middle, FwdIt last);
replace ÇÔ¼ö´Â first ~ last »çÀÌÀÇ Old°ªÀ» ¸ðÁ¶¸® µÚÁ® New·Î ´ëüÇÑ´Ù. ³ª¸ÓÁö °ªÀº ¹°·Ð ±×´ë·Î ³²´Â´Ù. ¾Ë°í¸®Áò ÇÔ¼öµé Áß¿¡ °¡Àå ÀÌÇØÇϱ⠽¬¿î ÇÔ¼öÀÌ´Ù. Á¶°ÇÀÚ ¹öÀüÀÎ replace_if´Â ƯÁ¤°ªÀÌ ¾Æ´Ñ ƯÁ¤ Á¶°ÇÀ» ¸¸Á·ÇÏ´Â °ªÀ» ´Ù¸¥ °ªÀ¸·Î º¯°æÇÒ ¼ö ÀÖ´Ù. º¹»ç ¹öÀüÀÎ replace_copyµµ ÀÖ°í Á¶°ÇÀÚ¸¦ ÃëÇÏ´Â º¹»ç ÇÔ¼öÀÎ replace_copy_if ÇÔ¼öµµ Á¦°øµÈ´Ù.
reverse´Â ±¸°£ÀÇ ¸ðµç ¿ä¼ÒÀÇ ¼ø¼¸¦ ¹Ý´ë·Î µÚÁý´Â´Ù. Áï Á¦ÀÏ ¾Õ¿¡ ÀÖ´Â ¿ä¼Ò´Â Á¦ÀÏ µÚÂÊÀ¸·Î °¡°í Á¦ÀÏ µÚÂÊ¿¡ ÀÖ´Â ¿ä¼Ò°¡ Á¦ÀÏ ¾ÕÂÊÀ¸·Î ¿Â´Ù. º¹»ç ¹öÀüÀÎ reverse_copy ÇÔ¼öµµ Á¦°øµÈ´Ù. rotate ÇÔ¼ö´Â first ~ last ±¸°£À» middleÀ» ±âÁØÀ¸·Î ȸÀü½ÃŲ´Ù. ±¸°£À» ÀÏÁ¾ÀÇ ¿øÇüÀ¸·Î °£ÁÖÇϰí ÇÑ ¹ÙÄû µ¹¸®´Â °ÍÀÌ´Ù. ¼Â ´Ù °³³äÀÌ °£´ÜÇϹǷΠ¿¹Á¦¸¦ ½ÇÇàÇØ º¸¸é ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
¿¹ Á¦ : replace |
#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()
{
const char *str="Notebook Computer";
vector<char> vc(&str[0],&str[strlen(str)]);
dump("¿øº»",vc);
replace(vc.begin(),vc.end(),'o','a');
dump("replace",vc);
rotate(vc.begin(),vc.begin()+2,vc.end());
dump("rotate",vc);
reverse(vc.begin(),vc.end());
dump("reverse",vc);
}
¹®ÀÚÇüÀÇ º¤Å͸¦ ÁغñÇÏ°í ¼¼ ÇÔ¼ö¸¦ Â÷·Ê´ë·Î È£ÃâÇØ º¸¾Ò´Ù. ¼¼ ÇÔ¼ö ¸ðµÎ ÄÁÅ×ÀÌ³Ê ÀÚü¸¦ Á¶ÀÛÇÏÁö´Â ¾ÊÀ¸¹Ç·Î ÄÁÅ×À̳ÊÀÇ Å©±â´Â ±×´ë·Î À¯ÁöµÈ´Ù.
¿øº» ==> N o t e b o o k C o m p u t e r
replace ==> N a t e b a a k C a m p u t e r
rotate ==> t e b a a k C a m p u t e r N a
reverse ==> a N r e t u p m a C k a a b e t
replace ÇÔ¼ö·Î ¸ðµç o¸¦ ã¾Æ a·Î º¯°æÇß´Ù. rotate ÇÔ¼ö´Â middle À§Ä¡¿¡ ÀÖ´ø ¿ä¼Ò°¡ firstÀÇ ÀÚ¸®·Î ¿Â´Ù°í »ý°¢ÇÏ¸é µÈ´Ù. Àü ±¸°£À» begin+2¸¦ ±âÁØÀ¸·Î ȸÀü½ÃÄ×À¸¹Ç·Î ¸ðµç ¹®ÀÚ°¡ ¾ÕÀ¸·Î µÎľ¿ À̵¿Çϸç Á¦ÀÏ ¾ÕÂÊ¿¡ ÀÖ´ø µÎ ¹®ÀÚ N°ú a´Â Á¦ÀÏ µÚÂÊÀ¸·Î À̵¿ÇÑ´Ù. reverse´Â ¿ä¼ÒÀÇ ¼ø¼¸¦ ¹Ý´ë·Î µÚÁý´Â´Ù. ´ÙÀ½ ÇÔ¼ö´Â ÀÏÁ¤ÇÑ Á¶°ÇÀ» ±âÁØÀ¸·Î ¿ä¼ÒµéÀ» Á¿ì·Î Àç¹èÄ¡ÇÑ´Ù.
BiIt partition(BiIt first, BiIt last, UniPred F);
BiIt stable_partition(BiIt first, BiIt last, UniPred F);
´ÜÇ× Á¶°ÇÀÚ F´Â ±¸°£³»ÀÇ ¿ä¼ÒµéÀ» Àμö·Î Àü´Þ¹Þ¾Æ ÀÌ ¿ä¼Ò°¡ Á¶°Ç¿¡ ¸Â´ÂÁö ¾Æ´ÑÁö¸¦ ÆÇº°ÇÑ´Ù. partition ÇÔ¼ö´Â FÀÇ Æò°¡ °á°ú¿¡ µû¶ó Á¶°Ç¿¡ ¸Â´Â ¿ä¼Ò´Â ±¸°£ÀÇ ¾ÕÂÊÀ¸·Î À̵¿½ÃŰ°í ±×·¸Áö ¾ÊÀº ¿ä¼Ò´Â µÚÂÊÀ¸·Î À̵¿½ÃŰ¸ç µÚÂÊ ±×·ìÀÇ ½ÃÀÛ À§Ä¡¸¦ ¸®ÅÏÇÑ´Ù. ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ°í ³ ÈÄ¿¡ ¿ÞÂÊ¿¡´Â Á¶°Ç¿¡ ¸Â´Â ¿ä¼Ò, ¿À¸¥ÂÊ¿¡´Â ±×·¸Áö ¾ÊÀº ¿ä¼ÒµéÀÌ ¹èÄ¡µÇ¾î ÀÖÀ» °ÍÀÌ´Ù.
stable_partition ÇÔ¼ö´Â Àç¹èÄ¡ÈÄ¿¡µµ ¿ä¼ÒµéÀÇ ¿ø·¡ ¼ø¼°¡ À¯ÁöµÇ´Â ¾ÈÁ¤µÈ ¹öÀüÀÌ´Ù °°Àº ±×·ì¿¡ ¼ÓÇÏ´Â °ªµé³¢¸®¶óµµ ¿ø·¡ ¾ÕÂÊ¿¡ ÀÖ¾ú´Ù¸é Àç¹èÄ¡ ÈÄ¿¡µµ ¿©ÀüÈ÷ ¾ÕÂÊ¿¡ ¹èÄ¡µÈ´Ù´Â ¶æÀÌ´Ù. ¾ÈÁ¤¼ºÀÌ ÀÖ´Â ´ë½Å ¼Óµµ´Â partitionº¸´Ù ´À¸®¸ç ´õ ¸¹Àº ¸Þ¸ð¸®¸¦ ¼Ò¸ðÇÑ´Ù. Á¤¼öµéÀ» ÀÏÁ¤ÇÑ °ª ±âÁØÀ¸·Î Àç¹èÄ¡ÇØ º¸ÀÚ.
¿¹ Á¦ : partition |
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
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,3,5,8,9,7,9,3,2,3,8};
vector<int> vi(&ari[0],&ari[sizeof(ari)/sizeof(ari[0])]);
dump("¿øº»",vi);
partition(vi.begin(),vi.end(),bind2nd(greater<int>(),5));
dump("partition",vi);
vector<int> ar2(&ari[0],&ari[sizeof(ari)/sizeof(ari[0])]);
stable_partition(ar2.begin(),ar2.end(),bind2nd(greater<int>(),5));
dump("stable",ar2);
}
Á¤¼öµéÀÌ ÀúÀåµÇ¾î ÀÖ´Â º¤Å͸¦ 5¸¦ ±âÁØÀ¸·Î ÇÏ¿© Á¿ì·Î Àç¹èÄ¡Çß´Ù. 5º¸´Ù ´õ Å©´Ù´Â Á¤µµÀÇ Á¶°ÇÀº ÇÔ¼ö °´Ã¼¸¦ ¸¸µé ÇÊ¿ä¾øÀÌ greater Ç¥ÁØ ÇÔ¼ö °´Ã¼¿Í bind2nd ¹ÙÀδõ¸¦ »ç¿ëÇÏ¸é ½±°Ô ¸¸µé ¼ö ÀÖ´Ù.
¿øº» ==> 3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8
partition ==> 8 9 7 9 8 9 6 2 5 3 5 5 1 4 1 3 2 3 3
stable ==> 9 6 8 9 7 9 8 3 1 4 1 5 2 5 3 5 3 2 3
5º¸´Ù Å« °ªµéÀÌ ¿ÞÂÊÀ¸·Î ¿Å°ÜÁ³°í ¿À¸¥ÂÊ¿¡´Â ±×·¸Áö ¾ÊÀº °ªµéÀÌ ¹èÄ¡µÈ´Ù. 5´Â 5º¸´Ù Å©Áö ¾ÊÀ¸¹Ç·Î À̵¿ ´ë»óÀÌ ¾Æ´Ï´Ù. ¾ÈÁ¤¼ºÀÌ ÀÖ´Â Àç¹èÄ¡ ÇÔ¼ö´Â ¿ä¼ÒÀÇ ¿ø·¡ ¼ø¼¸¦ ±×´ë·Î À¯ÁöÇϴµ¥ ¿øº»¿¡ ÀÖ´Â 5º¸´Ù Å« °ª 9, 6, 8, 9°¡ ¿øº» ¼ø¼ ±×´ë·Î Àç¹èÄ¡µÇ¾î ÀÖ´Ù. ¹Ý¸é ¾ÈÁ¤¼ºÀÌ ¾ø´Â Àç¹èÄ¡ ÇÔ¼ö´Â Á¶°ÇÀ» ±âÁØÀ¸·Î Á¿ì·Î ¿Å±â±â¸¸ ÇÒ »Ó ¼ø¼ À¯Áö´Â ÇÏÁö ¾Ê´Â´Ù.