from
http://www.devx.com/getHelpOn/10MinuteSolution/20410
- ´ë·®ÀÇ ÀÔÃâ·Â ÀÛ¾÷À» ½ºÆ®¸² ¹Ýº¹ÀڷΠó¸®Çϱâ
- ¹®Á¦
- ÇØ°á¹æ¹ý
- ¹®Á¦ »ùÇÃ
- ½ºÆ®¸² ¹Ýº¹ÀÚ »ç¿ëÇϱâ
- ÄÁÅ×À̳ʸ¦ ´ýÇÁÇϱâ
- ½ºÆ®¸² µ¥ÀÌÅ͸¦ ÄÁÅ×À̳ʿ¡´Ù ¾²±â
- ¹Ýº¹ÀÚ¿¡ ´ëÇÑ ¹Ýº¹
1 ´ë·®ÀÇ ÀÔÃâ·Â ÀÛ¾÷À» ½ºÆ®¸² ¹Ýº¹ÀڷΠó¸®Çϱâ
´ë·® ÀÔÃâ·Â ÀÛ¾÷Àº ¼º´É ¹®Á¦¿Í ¸®¼Ò½º ÇÒ´ç ¹®Á¦ ¶§¹®¿¡ ²Ï³ª ³ë·ÂÀÌ µé¾î°¡´Â ÀÛ¾÷ÀÌ´Ù. ¿¹¸¦ µé¾î ÄÁÅ×ÀÌ³Ê ¾È¿¡ ÀÖ´Â ³»¿ëµéÀ» µð¹ö±ëÀ» À§ÇØ cout »Ó¸¸ ¾Æ´Ï¶ó, ÆÄÀÏ¿¡µµ ±â·ÏÇØ¾ß ÇÑ´Ù°í ÇØº¸ÀÚ. ¾Æ¸¶µµ ÇϵåÄÚµùÀÌ ÇÊ¿äÇÒ °ÍÀÌ´Ù. ´Ù¸¥ °÷¿¡¼´Â ¾µ Àϵµ ¾ø°í, ¼öÁ¤Çϱ⵵ ¿ëÀÌÇÏÁö ¾Ê´Â ÄÚµåµéÀÌ´Ù. ÀÌ·± ÀÛ¾÷Àº Áö·çÇϰí, ½Ã°£À» ¸¹ÀÌ Àâ¾Æ¸ÔÀ¸¸ç, º¹ÀâÇÏ´Ù.
´ÙÇàÈ÷µµ <iterator> ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇϸé, µ¥ÀÌÅͰ¡ ³ª¿À´Â ¿øº»°ú ±× µ¥ÀÌÅ͸¦ ¾îµð -- ÆÄÀÏ, ´Ù¸¥ ÄÁÅ×À̳Ê, Ç¥ÁØ ÀÔ·Â, Ç¥ÁØ Ãâ·Â µîµî -- ¿¡ ±â·ÏÇÏ´ÂÁö¿¡ ´ëÇØ ½Å°æ¾²Áö ¾Ê°í ÀÛ¾÷ÇÒ ¼ö ÀÖ´Ù. °¢°¢ÀÇ µ¥ÀÌÅÍ ¿øº»°ú ´ë»óÀÇ Æ¯¼ö¼ºÀ» °í·ÁÇÏÁö ¾Ê¾Æµµ µÈ´Ù´Â ¸»ÀÌ´Ù.
½ºÆ®¸² ¹Ýº¹ÀÚ¸¦ ÀÌ¿ëÇϸé, ½Ã½ºÅÛ¿¡¼ ¸ðµç IO ÀÛ¾÷ÀÌ Çѹø¿¡ ÀÌ·ç¾îÁö´Â °Íó·³ ÃÖÀûȸ¦ ÇÒ ¼ö ÀÖ´Ù. ´õ Áß¿äÇÑ °ÍÀº ½ºÆ®¸² ¹Ýº¹ÀÚ¸¦ ÀÌ¿ëÇÏ¸é µ¥ÀÌÅÍ ¿øº»°ú µ¥ÀÌÅ͸¦ ±â·ÏÇÒ ´ë»óÀ» ¸¶À½´ë·Î ¹Ù²Ü ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù.
<iterator> ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇØ, ¾ÖÇø®ÄÉÀÌ¼Ç Á¦ÀÛ¿¡ µé¾î°¡´Â µé¾î°¡´Â ³ë·ÂÀº ÁÙÀ̸é¼, µðÀÚÀΰú ¼º´ÉÀº ²ø¾î¿Ã·Áº¸ÀÚ.
2 ¹®Á¦
¾î¶»°Ô ÇÏ¸é µ¥ÀÌÅ͸¦, ÄÁÅ×À̳Ê/ÆÄÀÏ/½ºÆ®¸² °£¿¡, È¿À²ÀûÀ¸·Î, ±×¸®°í ÅëÀÏµÈ ¹æ¹ýÀ¸·Î Àü´ÞÇÒ ¼ö ÀÖÀ»±î?
3 ÇØ°á¹æ¹ý
istream_iterator, ostream_iterator¸¦ ¼øÂ÷Àû ÀÔÃâ·ÂÀ» À§ÇØ »ç¿ëÇÑ´Ù.
4 ¹®Á¦ »ùÇÃ
Á¤¼ö¸¦ cinÀ¸·ÎºÎÅÍ ÀÔ·Â¹Þ¾Æ vector¿¡´Ù ±â·ÏÇÏ´Â ÇÁ·Î±×·¥À» »ý°¢ÇØ º¸ÀÚ. º°·Î °æÇèÀÌ ¾ø´Â ÇÁ·Î±×·¡¸Ó°¡ ±¸ÇöÇÑ´Ù¸é ´ëÃæ ¾Æ·¡¿Í °°À» °ÍÀÌ´Ù.
#include <vector>
using namespace std;
int main()
{
int num=0;
vector<int> vi;
while(true)
{
cout << "enter a number; 999 to quit: " << endl;
cin >> num;
if(num==999)
break;
vi.push_back(num);
}
} ÀÌ¿Í °°Àº ±¸Çö ¹æ¹ýÀ¸·Îµµ ÁÖ¾îÁø ¹®Á¦¸¦ ÇØ°áÇÏ´Â µ¥ ÁöÀåÀº ¾ø´Ù. ±×·¯³ª Äڵ尡 ³Ê¹« ±æ°í, ºñÈ¿À²ÀûÀ̸ç, À¯¿¬ÇÏÁö ¸øÇÏ´Ù. ¸ðµç µ¥ÀÌÅ͸¦ Çѹø¿¡ Àоîµé¿©, vector¿¡´Ù ¾´´Ù¸é ÈξÀ ³ªÀ» °ÍÀÌ´Ù. ¹Ù·Î ÀÌ·± ÀÏÀÌ ½ºÆ®¸² ¹Ýº¹ÀÚ°¡ ÇÏ´Â ÀÏÀÌ´Ù.
5 ½ºÆ®¸² ¹Ýº¹ÀÚ »ç¿ëÇϱâ
¹Ýº¹ÀÚ´Â Æ÷ÀÎÅÍ¿Í ¸Å¿ì ºñ½ÁÇÏ°Ô µ¿ÀÛÇÑ´Ù. ¹Ýº¹ÀÚÀÇ °ªÀ» Áõ°¡½Ã۸é, ¹è¿¿¡ ÀÖ´Â ´ÙÀ½ °ªÀ» °¡¸£Å°°Ô Çϰí, ¹Ýº¹ÀÚ¸¦ ¿ªÂüÁ¶(dereferencing)Çϸé, ÇöÀç °¡¸£Å°°í ÀÖ´Â °ªÀ» ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù. ½ºÆ®¸² ¹Ýº¹ÀÚ´Â cin, cout°ú °°Àº ½ºÆ®¸² »Ó¸¸ ¾Æ´Ï¶ó, <sstream>À̳ª <fstream> °°Àº ½ºÆ®¸²µµ ´Ù·ê ¼ö ÀÖ°Ô ÇØÁØ´Ù. °á°úÀûÀ¸·Î °¢Á¾ STL ¾Ë°í¸®Áò°ú ÄÁÅ×À̳ʸ¦ ÀÌµé ½ºÆ®¸²°ú ¼¯¾î ¾µ ¼ö ÀÖ´Ù´Â ¸»ÀÌ´Ù.
ostream_iterator¸¦ ÀÌ¿ëÇØ cout¿¡´Ù°¡ µ¥ÀÌÅ͸¦ ¾²´Â ¹æ¹ýÀÇ ¿¹Á¦´Ù.
#include <iterator>
#include <iostream>
using namespace std;
int main()
{
ostream_iterator<int> os(cout); //bind iterator to cout
*os=10; //causes cout<<10
os++; //prepare for the next output operation
*os=5; //cout<<5
} ¹Ýº¹ÀÚ¸¦ ¿ªÂüÁ¶ÇÑ ´ÙÀ½, °ªÀ» ÇÒ´çÇϸé, "cout << value;" ±¸¹®ÀÌ ½ÇÇàµÈ´Ù. os++ ±¸¹®Àº ´ÙÀ½ Ãâ·Â ÀÛ¾÷À» ÁغñÇÑ´Ù.
½ºÆ®¸² ¹Ýº¹ÀÚ°¡ ÀÌ ÇÁ·Î±×·¥ÀÇ µðÀÚÀÎÀ» ¾ó¸¶³ª °£´ÜÇÏ°Ô ¸¸µå´ÂÁö º¸¶ó. ¼öÁ¤ÇÑ ¹öÀüÀº copy() ¾Ë°í¸®Áò°ú ½ºÆ®¸² ¹Ýº¹ÀÚ¸¦ »ç¿ëÇØ, Ç¥ÁØ ÀԷ¿¡¼ µ¥ÀÌÅ͸¦ ¹Þ¾ÆµéÀÎ ´ÙÀ½, Ç¥ÁØ Ãâ·Â¿¡´Ù°¡ Ãâ·ÂÇÑ´Ù.
#include <algorithm> //std::copy()
#include <iterator>
#include <iostream>
using namespace std;
int main()
{
std::copy(istream_iterator<int> (cin),
istream_iterator<int> (),
ostream_iterator<int> (cout, " "));
} copy ÇÔ¼ö¿¡ ù¹øÂ° ÀÎÀڴ ǥÁØÀÔ·ÂÀÇ ½ÃÀÛÀ» °¡¸£Å²´Ù. Áï Á¤¼ö¸¦ Àоîµå¸± ½ºÆ®¸²ÀÇ ½ÃÀÛÁ¡ÀÌ´Ù. ÀÌ ¹Ýº¹ÀÚÀÇ °ªÀ» Áõ°¡½ÃŲ´Ù´Â ¸»Àº, ´ÙÀ½ Á¤¼ö·Î ³Ñ¾î°£´Ù´Â ¸»ÀÌ´Ù. ¿©±â¿¡¼ Èï¹ÌÀÖ´Â Áú¹®ÀÌ ³ª¿Â´Ù. ÀÔ·ÂÀÇ ³¡Àº ¾î¶»°Ô Ç¥½ÃÇϴ°¡? ÀÌ·± ¸ñÀûÀ» À§ÇØ istream_iterator<int>()¶ó´Â Ưº°ÇÑ ¹Ýº¹ÀÚ¸¦ »ç¿ëÇÑ´Ù. ¸ðµç Ç¥ÁØ ÄÁÅ×ÀÌ³Ê¿Í ¾Ë°í¸®ÁòÀº ÀÌ ¹Ýº¹ÀÚ °´Ã¼¸¦ ÀÔ·Â ½ºÆ®¸²ÀÇ ³¡À¸·Î °£ÁÖÇÑ´Ù. ¸¶Áö¸·À¸·Î ostream_iterator<int> (cout, " ")´Â Ç¥ÁØ Ãâ·Â¿¡ ¹ÀÎ ¹Ýº¹ÀÚ´Ù. Á¤¼ö°¡ ¾²¿©Áú ¹Ýº¹ÀÚ ¸»ÀÌ´Ù. " " Àμö´Â ¿É¼ÇÀÌ´Ù. °¢°¢ÀÇ Á¤¼ö¸¦ ±¸ºÐÇϱâ À§ÇØ Ãâ·ÂµÉ ¹®ÀÚ¿ÀÌ´Ù.
½ºÆ®¸²Àº °°Àº ŸÀÔÀÇ µ¥ÀÌÅͰ¡ ¿¬¼ÓÀûÀ¸·Î ¹è¿µÇ¾î ÀÖ´Â °ÍÀ» ¸»ÇÑ´Ù. int, double, string, complex, ¹¹¶óµµ »ó°ü¾øÀ¸³ª, ´Ù¸¥ ŸÀÔÀÇ µ¥ÀÌÅͰ¡ ¿¬¼ÓÀûÀ¸·Î µé¾î°¡ ÀÖÀ¸¸é ¾È µÈ´Ù.
ÀÌ ÇÁ·Î±×·¥Àº ½ºÆäÀ̽º³ª ÅÇÀ¸·Î ºÐ¸®µÇ¾î ÀÖ´Â Á¤¼öµéÀ» ÀоîµéÀδÙ. À§ ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¸é ¾Æ·¡¿Í °°Àº ¸ð¾çÀÌ µÈ´Ù.
±×¸² 1. ÀϹÝÀûÀÎ ÀÔ·Â ¼¼¼Ç
CTRL-Z ¶Ç´Â CTRL-NÀ» ´©¸£¸é ÀÔ·Â ¼¼¼ÇÀ» ³¡³»°í, Ãâ·ÂÀ» ½ÇÇàÇÑ´Ù.
±×¸² 2. ÀÔ·ÂÀÌ ³¡³ª°í Ãâ·ÂÀÌ ³ª¿À´Â ¸ð½À
¼ýÀÚµéÀÌ ½ºÆäÀ̽º·Î ±¸ºÐµÇ¾î Ãâ·ÂµÇ´Â ¸ð½ÀÀ» º¼ ¼ö ÀÖ´Ù. ±¸ºÐÀÚ¸¦ "\n" ¹®ÀÚ¿·Î ¹Ù²Ù¸é ¾Æ·¡¿Í °°Àº ³»¿ëÀÌ Ãâ·ÂµÈ´Ù.
±×¸² 3. ±¸ºÐÀÚ·Î "\n"À» ÁØ °æ¿ì
6 ÄÁÅ×À̳ʸ¦ ´ýÇÁÇϱâ
"GUI ±â¹ÝÀÇ ÇÁ·Î±×·¥Àº cin, coutÀ» »ç¿ëÇÒ ¼ö ¾ø´Âµ¥ À̰͵éÀÌ ´Ù ¹«½¼ ¼Ò¿ëÀ̳Ä?"¶ó°í ¹¯´Â »ç¶÷ÀÌ ÀÖÀ» °ÍÀÌ´Ù. ½ºÆ®¸² ¹Ýº¹ÀÚÀÇ °·ÂÇÔÀ» º¸¿©ÁÖ±â À§ÇØ Á» ´õ Çö½ÇÀûÀÎ ¿¹Á¦, Áï ÄÁÅ×ÀÌ³Ê ¾È¿¡ ÀÖ´Â ³»¿ëÀ» cout »Ó¸¸ ¾Æ´Ï¶ó ÆÄÀÏ¿¡µµ Ãâ·ÂÇÏ´Â ¿¹Á¦¸¦ º¸¿©ÁÖ°Ú´Ù.
void func()
{
vector<int> vi(10,35); //fill with 10 int of the value 35
//write contents of vi to cout, each number on a new line
std::copy(vi.begin(),
vi.end(),
ostream_iterator<int> (cout, "\n"));
} func() ÇÔ¼ö´Â copy() ¾Ë°í¸®ÁòÀ» ÀÌ¿ëÇØ vector ¾È¿¡ ÀÖ´Â ³»¿ëÀ» cout¿¡´Ù Ãâ·ÂÇÑ´Ù. copy() ÇÔ¼ö¿Í ù¹øÂ°¿Í µÎ¹øÂ° ÀÎÀÚ´Â ÀÔ·ÂÀÇ ½ÃÀÛ°ú ³¡À» ³ªÅ¸³½´Ù. ÀÌ ÇÔ¼öÀÇ Ãâ·ÂÀº ´ÙÀ½°ú °°´Ù.
Figure 4. func() ÇÔ¼ö Ãâ·Â
ÄÁÅ×ÀÌ³Ê ¾È¿¡ ÀÖ´Â ³»¿ëÀ» ÆÄÀÏ¿¡´Ù ±â·ÏÇÏ´Â °Íµµ ºñ½ÁÇÏ´Ù.
void f(const vector<int> &vi)
{
//open a file in write mode
ofstream vi_dump("vi.txt");
if (!vi_dump) //failure?
{
cerr<<"couldn't open file";
exit(1);
}
copy(vi.begin(),
vi.end(),
ostream_iterator<int> (vi_dump, " "));
} copy() ÇÔ¼ö ¼¼¹øÂ° ÀÎÀÚÀÎ ostream_iterator °´Ã¼°¡ ÆÄÀÏ °´Ã¼¿¡ ¹ÀÎ °ÍÀ» º¼ ¼ö ÀÖ´Ù. °á°úÀûÀ¸·Î copy() ¾Ë°í¸®ÁòÀº ÆÄÀÏ¿¡´Ù°¡ ÄÁÅ×ÀÌ³Ê ¾È¿¡ ÀÖ´Â ³»¿ëÀ» ±â·ÏÇÏ°Ô µÈ´Ù.
7 ½ºÆ®¸² µ¥ÀÌÅ͸¦ ÄÁÅ×À̳ʿ¡´Ù ¾²±â
ÆÄÀÏ¿¡¼ µ¥ÀÌÅ͸¦ Àоî ÄÁÅ×À̳ʿ¡´Ù Áý¾î³Ö´Â °Í ¶ÇÇÑ ½±´Ù.
#include<vector>
#include<fstream>
#include<algorithm>
#include<cstdlib>
#include<iostream>
using namespace std;
int main()
{
vector<int> vi;//vector to be filled
ifstream vi_dump("vi.txt"); //open for read
if (!vi_dump)
{
cerr<<"couldn't open file";
exit(1);
}
copy(istream_iterator<int> (vi_dump),
istream_iterator<int> (),
back_inserter(vi));
} copy() ÇÔ¼ö´Â ÆÄÀÏ¿¡¼ µ¥ÀÌÅ͸¦ ÀÐ¾î º¤ÅÍ¿¡´Ù Áý¾î³Ö´Â´Ù. back_inserter(vi) ¹Ýº¹Àڴ Ưº°ÇÑ ¹Ýº¹Àڷμ, vector¿¡ »õ·Î¿î µ¥ÀÌÅͰ¡ µé¾î°¥ ¶§¸¶´Ù »õ·Î¿î °ø°£À» È®º¸ÇÑ´Ù.
8 ¹Ýº¹ÀÚ¿¡ ´ëÇÑ ¹Ýº¹
½ºÆ®¸² ¹Ýº¹ÀÚ¸¦ »ç¿ëÇØ º» ÀûÀÌ ¾ø´Ù¸é, ÀÌ·± ÀÛ¾÷µéÀÌ ¸¶¼ú °°¾Æ º¸ÀÏ ¼öµµ ÀÖ´Ù. ÇÏÁö¸¸ ÀÌ ¸ðµç °ÍÀº ¼øÈ¯ÀûÀ¸·Î µ¿ÀÛÇÑ´Ù.
- µ¥ÀÌÅÍ ¿øº»À» ÀÔ·Â ½ºÆ®¸²À¸·Î¼, ´ë»óÀ» Ãâ·Â ½ºÆ®¸²À¸·Î¼ ´Ù·é´Ù.
- ÀÌ ½ºÆ®¸²µéÀ» °¡¸£Å°´Â ¹Ýº¹ÀÚ¸¦ »ý¼ºÇÑ´Ù.
- ¿øº»¿¡¼ ´ë»óÀ¸·Î µ¥ÀÌÅ͸¦ Àü¼ÛÇϱâ À§ÇØ ¾Ë°í¸®Áò ¶Ç´Â ÄÁÅ×À̳ʸ¦ »ç¿ëÇÑ´Ù.
°£´ÜÇÔÀ» À§ÇØ À§ ¿¹Á¦µé¿¡¼´Â copy() ¾Ë°í¸®Áò¸¸À» »ç¿ëÇßÀ¸³ª, transform(), find(), replace()¿Í °°Àº ¾Ë°í¸®Áòµéµµ ¾ó¸¶µçÁö »ç¿ë°¡´ÉÇÏ´Ù.
SeriousMoin v1 (koMoinMoin 1.0a4 Modified)