42-2-³ª.¿ä¼Ò »ý¼º

¿ä¼Ò »ý¼º ÇÔ¼ö´Â »õ·Î¿î ¿ä¼Ò¸¦ ¸¸µé¾î ÁöÁ¤ÇÑ À§Ä¡¿¡ ´ëÀÔÇÏ´Â ÇÔ¼öµéÀÌ´Ù. ¿ä¼Ò¸¦ ¸¸µå´Â °ÍÀº ¸ÂÁö¸¸ ÄÁÅ×À̳ʿ¡ »ðÀÔÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ±âÁ¸ ¿ä¼Ò¸¦ ÆÄ±«ÇÏ°í ´ëÀÔÇÑ´Ù´Â Á¡À» ÁÖÀÇÇϵµ·Ï ÇÏÀÚ. ´ÙÀ½ ÇÔ¼ö´Â ¹Ýº¹ÀÚ ±¸°£À» val °ªÀ¸·Î °¡µæ ä¿î´Ù.

 

void fill(FwdIt first, FwdIt last, const T& val);

void fill_n(OutIt first, Size n, const T& val);

 

fillÀº ¹Ýº¹ÀÚ ±¸°£À» ÁöÁ¤Çϴµ¥ ºñÇØ fill_nÀº ½ÃÀÛ À§Ä¡¿Í °³¼ö¸¦ ÁöÁ¤ÇÑ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. ¹Ýº¹ÀÚ ±¸°£Àº ÀÌ¹Ì ¸Þ¸ð¸®°¡ È®º¸µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. ¸¸¾à »ý¼ºµÈ °ªÀ» ²À »ðÀÔÇÏ·Á¸é »ðÀÔ ¹Ýº¹ÀÚ¸¦ »ç¿ëÇØ¾ß Çϸç À̶§´Â µÎ ¹øÂ° ¿øÇü¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

 

¿¹ Á¦ : fill

#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[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

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

 

     fill(vi.begin()+2,vi.end()-5,99);

     dump("vi",vi);

}

 

Á¤¼ö°ªÀ» °¡Áø º¤ÅÍÀÇ ÀÏÁ¤ ±¸°£À» 99·Î ä¿ü´Ù. ±¸°£³»ÀÇ ¸ðµç °ªÀ» 99·Î º¯°æÇÏ´Â °ÍÀÌ´Ù.

 

vi          ==> 1 2 99 99 99 99 99 99 99 99 99 12 13 14 15 16

 

fill_n(vi.begin()+2,5,99); ÀÌ·¸°Ô ¼öÁ¤Çϸé 2¹øÂ°ºÎÅÍ 5°³ÀÇ ¿ä¼Ò°¡ 99·Î ¹Ù²ï´Ù. ÄÁÅ×À̳ÊÀÇ ¸ðµç ¿ä¼Ò¿¡ ´ëÇØ ÀϰýÀûÀ¸·Î ´ëÀÔÇÏ°í ½ÍÀ» ¶§ ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö´Â ¹Ýº¹ÀÚ ±¸°£ÀÇ ¿ä¼ÒµéÀ» ¹«ÀÛÀ§·Î ¸¶±¸ ¼¯´Â´Ù.

 

void random_shuffle(RanIt first, RanIt last[, UniOp& op]);

 

¹Ýº¹ÀÚ ±¸°£Àº ¹°·Ð À¯È¿ÇØ¾ß ÇÑ´Ù. ÀÌ ÇÔ¼ö´Â ³­¼ö·Î ¿ä¼Ò¸¦ »ý¼ºÇؼ­ ´ëÀÔÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ÀÌ¹Ì Á¸ÀçÇÏ´Â °ªµéÀÇ ¼ø¼­¸¦ ³­¼ö·Î º¯°æÇÔÀ¸·Î¼­ ¼¯´Â´Ù.

 

¿¹ Á¦ : random_shuffle

#include <Turboc.h>

#include <iostream>

#include <algorithm>

using namespace std;

 

void main()

{

     char str[]="abcdefghijklmnopqrstuvwxyz";

    

     randomize();

     puts(str);

     random_shuffle(&str[0],&str[strlen(str)]);puts(str);

     random_shuffle(&str[0],&str[strlen(str)]);puts(str);

     random_shuffle(&str[0],&str[strlen(str)]);puts(str);

}

 

¾ËÆÄºªÀÌ ¼ø¼­´ë·Î µé¾î°¡ ÀÖ´Â ¹è¿­À» ÀÌ ÇÔ¼ö·Î ¼¯¾î º¸¾Ò´Ù. ¹«ÀÛÀ§ ³­¼ö¸¦ »ç¿ëÇßÀ¸¹Ç·Î ½ÇÇà °á°ú´Â ¸Å¹ø ´Þ¶óÁú °ÍÀÌ´Ù.

 

abcdefghijklmnopqrstuvwxyz

etarkmilsygqhojxuzwpnbfdvc

oabsrvdiepmzknhugjcxywltfq

blvuserzyfgknjcoaxmpqhiwdt

 

³­¼ö¸¦ ¹ß»ý½ÃŰ´Â »ý¼º±â ÇÔ¼ö °´Ã¼¸¦ ÁöÁ¤ÇÒ ¼öµµ ÀÖÁö¸¸ ´ëºÎºÐÀÇ °æ¿ì µðÆúÆ® ³­¼ö ¹ß»ý±â¸¦ »ç¿ëÇØµµ °í¸£°Ô Àß ¼¯À¸¹Ç·Î ±»ÀÌ »ý¼º±â¸¦ Á¦°øÇÒ ÇÊ¿ä´Â ¾ø´Ù. »ý¼º±â ÇÔ¼ö´Â ³­¼ö ¹üÀ§ÀÇ »óÇÑÀ» ÁöÁ¤ÇÏ´Â Á¤¼ö¸¦ Àμö·Î ¹Þ¾Æ 0~Àμö ¹Ì¸¸ÀÇ ³­¼ö¸¦ ¹ß»ý½ÃÄÑ¾ß ÇÑ´Ù. °ÔÀÓÆÇÀ» ¹«ÀÛÀ§·Î ¼¯°íÀÚ ÇÒ ¶§ ÈçÈ÷ »ç¿ëµÈ´Ù. ´ÙÀ½ ÇÔ¼ö´Â ¹Ýº¹ÀÚ ±¸°£¿¡ ´ëÇØ g ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¸®ÅϵǴ °ªÀ¸·Î ä¿î´Ù.

 

void generate(FwdIt first, FwdIt last, Gen g);

void generate_n(OutIt first, Dist n, Gen g);

 

fill ÇÔ¼ö¿Í ¸¶Âù°¡Áö·Î ¹Ýº¹ÀÚ ±¸°£À» Àμö·Î Àü´Þ¹ÞÀ» ¼öµµ ÀÖ°í ½ÃÀÛ À§Ä¡¿Í °³¼ö¸¦ Àμö·Î ¹ÞÀ» ¼öµµ ÀÖ´Ù. g´Â Àμö¸¦ ¹ÞÁö ¾Ê°í ÄÁÅ×ÀÌ³Ê ¿ä¼Ò ŸÀÔÀ» ¸®ÅÏÇÏ´Â ÇÔ¼ö °´Ã¼ÀÌ´Ù. ´ÙÀ½ ¿¹Á¦´Â ÇǺ¸³ªÄ¡ ¼ö¿­À» ¸¸µç´Ù.

 

¿¹ Á¦ : generate

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

{

     static int i1=1,i2=1;

     int t;

     t=i1+i2;

     i1=i2;

     i2=t;

     return t;

}

 

void main()

{

     vector<int> vi(10);

 

     generate(vi.begin(),vi.end(),fibo);

     dump("vi",vi);

}

 

Å©±â 10ÀÇ Á¤¼ö º¤Å͸¦ ¸¸µé°í ÀÌ º¤Å͸¦ ÇǺ¸³ªÄ¡ ¼ö¿­·Î ä¿ü´Ù.

 

vi          ==> 2 3 5 8 13 21 34 55 89 144

 

ÇǺ¸³ªÄ¡ ¼ö¿­Àº ÀÌ ¿Ü¿¡µµ ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î ¸¸µé ¼ö ÀÖ´Ù. »ý¼º±â ÇÔ¼ö °´Ã¼´Â º°µµÀÇ Àμö¸¦ ¹Þ¾ÆµéÀÌÁö ¾ÊÀ¸¹Ç·Î ¸Å¹ø ´Ù¸¥ °ªÀ» ¸¸µé±â À§Çؼ­´Â ÇÔ¼ö ÀÚü°¡ º°µµÀÇ Á¤º¸¸¦ ÀúÀåÇϰí ÀÖ¾î¾ß ÇÑ´Ù. ¿¹Á¦ÀÇ fibo ÇÔ¼ö´Â Á÷ÀüÀÇ ¼ö µÑÀ» Á¤Àûº¯¼ö¿¡ ÀúÀåÇϰí Àִµ¥ ¸ÖƼ ½º·¹µå ȯ°æ¿¡¼­´Â µ¿±âÈ­ ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ÀÌ·² ¶§´Â ÇÔ¼ö °´Ã¼¸¦ ¸¸µé¾î¾ß ÇÑ´Ù.

 

struct fibo {

private:

     int i1,i2;

public:

     fibo() : i1(1),i2(1) { }

     int operator()() {

          int t;

          t=i1+i2;

          i1=i2;

          i2=t;

          return t;

     }

};

generate(vi.begin(),vi.end(),fibo());

 

ÇÔ¼ö °´Ã¼´Â ÀÛ¾÷ °á°ú¸¦ ½º½º·Î ÀúÀåÇÒ ¼ö ÀÖÀ¸¸ç ¸Å È£Ã⸶´Ù Áö¿ªÀûÀ¸·Î »ý¼ºµÉ ¼ö ÀÖÀ¸¹Ç·Î ¸ÖƼ ½º·¹µå ȯ°æ¿¡¼­µµ Àß µ¿ÀÛÇÑ´Ù.