STL ¼Ò°³
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

<a href="/modules/moniwiki/wiki.php/manSearch?google=none&name=STL">STL</a>(1) - °³¿ä

STL(1) - °³¿ä

À± »ó¹è

dreamyun@yahoo.co.kr



1절. ¼Ò°³

±×µ¿¾È ÀÌ»çÀÌÆ®ÀÇ ¸î°³ ¹®¼­¿¡¼­ STL ¿¡ ´ëÇÑ ¾ð±ÞÀÌ ÀÖ¾úÁö¸¸, ¸Å¹ø ±×³É ÀÌ·±°ÍÀÌ ÀÖ´Ù.. ¶ó´Â Á¤µµ·Î ÇÏ°í ³Ñ¾î°¬¾ú´Ù. À̹ø¿¡´Â STL¿¡ ´ëÇÑ Á÷Á¢ÀûÀÎ ³»¿ëÀ» ´Ù·ç·Á°í ÇÑ´Ù.

STL ¿¡ ´ëÇØ¼­ Á¦´ë·Î ´Ù·ç±â À§Çؼ­´Â C++ ¿¡ ´ëÇÑ ±âº»ÀûÀÎ ÀÌÇØ¿Í ÅÛÇø´ ¿¡ ´ëÇÑ ÀÌÇØ¸¦ ÇÊ¿ä·Î ÇÑ´Ù. (ÅÛÇø´, Ŭ·¡½º, ¿À¹ö·Îµù, ÇÔ¼öÆ÷ÀÎÅÍ µî¿¡ ´ëÇÑ ÀÌÇØ¸¦ ÇÊ¿ä·Î ÇÑ´Ù.) ±×¸®°í STL Àüü¸¦ Á¦´ë·Î ´Ù·ç·Á¸é »ó´çÈ÷ ¸¹Àº ½Ã°£À» ÅõÀÚÇØ¾ß ÇÑ´Ù. º¸Åë STL ÁÖÁ¦¸¸À¸·Îµµ Ã¥ ÇÑµÎ±Ç Á¤µµ´Â °£´ÜÇÏ°Ô ³ª¿Ã°ÍÀÌ´Ù(½ÇÁ¦·Î STLÀ» ÁÖÁ¦·ÎÇÑ ¸î±ÇÀÇ Ã¥ÀÌ ½ÃÁß¿¡ ³ª¿ÍÀÖ´Ù).

±×·¯¹Ç·Î STL ¿¡ ´ëÇÑ °­Á´ ¸î¹øÀÇ ±â»ç¿¡ ³ª´©¾î¼­ ÀÌ·ç¾îÁö°Ô µÉ°ÍÀÌ´Ù. À̹ø ±â»ç´Â STL ¿¡ ´ëÇÑ ¼Ò°³¿Í ÅÛÇø´ ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ³»¿ëµéÀ» ´Ù·ç°Ô µÉ°ÍÀ̰í, ´ÙÀ½¹øÀÇ ±â»ç´Â "sequences ÄÁÅ×À̳Ê", "associative ÄÁÅ×À̳Ê", "Iterator", "¾Ë°í¸®Áò", "±×¹ÛÀÇ STL ¿¡ ´ëÇÑ ±â¼úÀûÀÎ ´Ù¸¥ ³»¿ëµé" ÀÌ µÉ°ÍÀÌ´Ù. ÀüüÀûÀ¸·Î 5-6ȸ¿¡ °ÉÃļ­ ¿¬Á¦¿¡ µé¾î°¡°Ô µÉ°ÍÀÌ´Ù.


2절. STL ¼Ò°³

2.1절. STL À̶õ ¹«¾ùÀΰ¡

STL Àº Standard Template Library ¶ó°í ºÒ¸®¿ì¸ç, C++ ¿¡¼­ »ç¿ëÇÒ¼ö ÀÖ´Â ÄÁÅ×À̳Ê(container) class ¿Í, ¾Ë°í¸®Áò ÀϹÝÈ­ ½ÃÄѼ­ »ç¿ëÇÒ¼ö ÀÖ´Â ÀڷᱸÁ¶ µîÀ» Æ÷ÇÔÇÏ´Â ¶óÀ̺귯¸®ÀÇ ¸ðÀ½ÀÌ´Ù. STL Àº ÈçÈ÷ generic library(ÀϹÝÈ­µÈ ¶óÀ̺귯¸®) ¶ó°í ºÒ¸®¿ì¸ç, ÀÌ·¯ÇÑ ÀϹÝÈ­¸¦ ±¸ÇöÇϱâ À§Çؼ­ C++ ¿¡¼­ Á¦°øÇÏ´Â Template(ÅÛÇø´) À» »ç¿ëÇϰí ÀÖ´Ù.


2.1.1절. ¿Ö STL À» »ç¿ëÇϴ°¡

Àü¿ëÀÇ ÇÔ¼ö ȤÀº Àü¿ëÀÇ ÀڷᱸÁ¶°¡ ¾Æ´Ñ ÀϹÝÀûÀ¸·Î »ç¿ë °¡´ÉÇÑ ÇÔ¼ö ȤÀº ÀڷᱸÁ¶¸¦ ¸¸µé±â À§Çؼ­À̸ç, ÀÌ·¯ÇÑ ÀϹÝÀûÀÎ ÀڷᱸÁ¶¿¡ ÀϹÝÀûÀÎ ¾Ë°í¸®ÁòÀ» Àû¿ë½Ã۱â À§Çؼ­ ÀÌ´Ù.

¸»ÀÌ º¹ÀâÇѵ¥ °£´ÜÈ÷ ¸»Çؼ­, ÇÁ·Î±×·¡¹Ö ½Ã°£À» ±ØÀûÀ¸·Î ´ÜÃà½Ã۰í ÄÚµå¼ö¸¦ ÁÙÀ̰í À¯Áöº¸¼ö ½±°í È®Àå ½¬¿î Äڵ带 ¸¸µé±â À§Çؼ­ÀÌ´Ù. ÇѸ¶µð·Î ÀλýÀ» ÆíÈ÷ Áñ±â±â À§Çؼ­ STL À» »ç¿ëÇÑ´Ù. ¿¹¸¦µé¾î ¿©·¯ºÐÀÌ queue ÀڷᱸÁ¶¸¦ ±¸ÇöÇÑ´Ù°í ÇØº¸ÀÚ. ¸Ó Àü»ê¼ö¾÷½Ã°£¿¡ Ãæ½ÇÈ÷ Çß´Ù¸é, ±×¸®°í ½ÃÁß¿¡ ³ª¿ÍÀÖ´Â ¸î°¡Áö Ã¥µéÀ» ¿­½ÉÈ÷ ¼··ÆÇß´Ù¸é ¸¸µé¼ö´Â ÀÖ°ÚÁö¸¸, °³ÀÎÀûÀÎ »ý°¢Àε¥, ÃÖ¼ÒÇÑ ¼ö¹é¶óÀÎ ÀÌ»óÀÇ Äڵ带 ±×·Á³»¾î¾ß ÇÒ°ÍÀÌ´Ù. ÄÚµå¼ö°¡ ´Ã¾î³µÀ¸´Ï ±×¸¸Å­ ¹ö±×ÀϾ È®·üµµ ¸¹°í, À̰ÍÀú°Í Àâ´ÙÇÏ°Ô ½Å°æ½á¾ßÇÒ°Ô Çѵΰ³°¡ ¾Æ´Ò°ÍÀÌ´Ù. °Ô´Ù°¡ ´Ù¸¥ ÀڷᱸÁ¶¸¦ Áö¿øÇϵµ·Ï ÇØ¾ß ÇÑ´Ù¸é, ±×¶§ ¸¶´Ù °¢°¢ÀÇ ÀڷᱸÁ¶¸¦ À§ÇÑ »õ·Î¿î Àü¿ëÀÇ ÇÔ¼öµéÀ» »ý¼ºÇØ ³»¾ß¸¸ ÇÒ°ÍÀÌ´Ù. ¸ÅÅ©·Î¸¦ ÀÌ¿ëÇØ¼­ ȤÀº Ŭ·¡½º¸¦ ÀÌ¿ëÇØ¼­ ¾î´ÀÁ¤µµ Èä³»³»±â´Â °¡´ÉÇϰÚÁö¸¸, ÀÌ°Ç ¾îµð±îÁö³ª Èä³»ÀÏ »ÓÀÌ´Ù.

ÀÌ°É STL ¿¡¼­ Á¦°øÇÏ´Â deque ¸¦ ÀÌ¿ëÇϸé 10ÁÙ ³»¿Ü·Î ÀÛ¼º °¡´ÉÇÏ´Ù. Å©±â°¡ ¾ó¸¶³ª µÇ¾î¾ß ÇÒÁö °ÆÁ¤ÇÒ Çʿ䵵 ¾ø°í, ¸Þ¸ð¸® »¶³ªÁö ¾ÊÀ»Áö, queue ¸¦ ¾î¶»°Ô ±¸¼ºÇØ¾ß ÇÒÁö¿¡ ´ëÇØ¼­ °í¹ÎÇÒ ÇÊ¿ä ¾øÀÌ ±×³É ¼±¾ðÇØ¼­ »ç¿ëÇÏ¸é µÈ´Ù. °Ô´Ù°¡ Ç¥ÁØÀÌ´Ù. Linux ¿¡¼­ ÀÛ¼ºÇѰб״ë·Î ¼Ö¶ó¸®½º¿¡¼­ ÄÄÆÄÀϸ¸ Çϸé Á¦´ë·Î ÀÛµ¿ÇÑ´Ù. Windows ¿¡¼­µµ ¸¶Âù°¡ÁöÀÌ´Ù(À©µµ¿ìÀÇ °æ¿ì STL ¶óÀ̺귯¸®¸¦ º°µµ·Î ¼³Ä¡ÇØ¾ß Çϴ°ɷΠ¾Ë°í ÀÖ´Ù).

¿¹Á¦ : queue.cc

#include <deque>

int main()
{
	deque<int> myque;	

	myque.push_back(100);
	myque.push_back(200);
	cout << myque[0] << endl;
	myque.pop_front();
	myque.push_back(300);
	myque.push_back(400);
	cout << myque[0] << endl;
	myque.pop_front();
	cout << myque[0] << endl;

	cout << "Size " << myque.size() << endl;
}
				
À§ÀÇ Äڵ带 º¸½Ã¶ó ½ÇÁúÀûÀ¸·Î º¸¸é queue ÀڷᱸÁ¶¸¦ À§Çؼ­ ´ÜÁö ÇÑÁÙ¸¸À» »ç¿ëÇϰí ÀÖÀ½À» ¾Ë¼ö ÀÖ´Ù. ´ÜÁö ÇѹøÀÇ ¼±¾ðÀ¸·Î queue ÀڷᱸÁ¶¸¦ ¸¸µé¾ú´Ù. ¸¸¾à Å¥¿¡ ÀúÀåÇÒ ÀÚ·á°¡ ¹®ÀÚ¿­ÀÌ¿©¾ß ÇÑ´Ù¸é ? deque<char *> mychar; ÀÌ ÇÑÁÙ·Î ³¡ÀÌ´Ù. ±¸Á¶Ã¼, Ŭ·¡½º ´Â ¹°·ÐÀÌ°í ´Ù¸¥ STL ÄÁÅ×ÀÌ³Ê ±îÁöµµ ¸â¹ö ÀÚ·á·Î °¡Áú¼ö ÀÖ´Ù.

À§ÀÇ queue °°Àº °æ¿ì´Â STL À» »ç¿ëÇÏÁö ¾Ê´õ¶óµµ ±×¸¶³ª ±¸ÇöÀÌ ¿ëÀÌÇÏ´Ù. ±×·¸Áö¸¸ map(À妽º°¡ int ÇüÀÌ ¾Æ´Ñ ½ºÆ®¸µ°°Àº) °°Àº°É±¸ÇöÇÏ·Á°í ÇÑ´Ù¸é À̰Šº¸ÅëÀÏÀÌ ¾Æ´Ò°ÍÀÌ´Ù. À̰Ϳª½Ã STL À» ÀÌ¿ëÇÏ¸é ¼±¾ðÀ¸·Î ³¡ÀÌ´Ù.

°á·ÐÀûÀ¸·Î ¸»Çؼ­ STLÀ» »ç¿ëÇÏ¸é ±×·¸Áö ¾ÊÀ»¶§ º¸´Ù 50% ÀÌ»óÀÇ ½Ã°£Àý¾àÀÌ °¡´ÉÇÏ´Ù. °Ô´Ù°¡ ¾Æµå·¹³¯¸°ÀÇ »ý¼ºµµ ȹ±âÀûÀ¸·Î ÁÙ¿©ÁØ´Ù. ƯÈ÷ µ¥ÀÌŸ ÀúÀå°ú ÀڷᱸÁ¶¸¦ À§ÇÑ container ÀÇ Á¦ÀÛ°ú »ç¿ë¿¡ À־ ȹ±âÀûÀÎ ¹æ¹ýÀ» Á¦°øÇØ ÁØ´Ù.


2.1.2절. STL Àº ¾î¶»°Ô ±¸ÇöµÇ¾ú´Â°¡

STL Àº Ŭ·¡½º¸¦ ÅëÇØ¼­ ÀÌ·ç¾îÁø°Ô ¾Æ´Ï´Ù (STL ÅÛÇø´ µéµµ Ŭ·¡½º·Î ¸¸µé¾î Á³´Ù. ¿©±â¿¡¼­ ¸»ÇÏ´Â °ÍÀº ¸ðµç ±â´ÉÀÇ ±¸ÇöÀ» À§Çؼ­ Ŭ·¡½º¸¸À» ÀüÀûÀ¸·Î »ç¿ëÇÑ°Ô ¾Æ´Ï¶õ ¶æÀÌ´Ù. STL¿¡¼­ Ŭ·¡½º´Â °ÅÀÇ ¸Þ¼­µå¿Í ÀÚ·áÇüÀ» ÇÔ²² µÎ±â À§ÇÑ ±¸Á¶Ã¼ ¼öÁØ¿¡¼­ »ç¿ëµÈ´Ù.). C++ ¿¡¼­ Á¦°øÇÏ´Â Template ¸¦ ÀÌ¿ëÇØ¼­ ÀÌ·ç¾îÁ³´Ù. ÀÌ template ¿¡ ´ëÇØ¼­´Â µû·Î ÀåÀ» ÇÒ´çÇØ¼­ ¼³¸íÇÒ°ÍÀÌ´Ù.


2.1.3절. STLÀÇ Àå´ÜÁ¡

¸ðµç°Ô ±×·¸Áö¸¸ STL ¿ª½Ã ÀåÁ¡°ú ´õºÒ¾î ¸î°¡ÁöÀÇ ´ÜÁ¡À» °¡Áö°í ÀÖ´Ù.


2.1.3.1절. ÀåÁ¡

ÀåÁ¡À¸·Î´Â ¿ì½¼ ¼Ò½ºÅ©±âÀÇ Ãà¼Ò¸¦ µé¼ö ÀÖ´Ù. ÀÌ¹Ì STL¿¡´Â ÀÚÁÖ »ç¿ëµÇ´Â 50¿©°³ Á¤µµÀÇ ¾Ë°í¸®Áò°ú ´Ù¾çÇÑ µ¥ÀÌŸ ±¸Á¶µéÀ» °¡Áö°í ÀÖ´Ù. ¿ì¸®´Â ÀÌ·¯ÇÑ STL¿¡¼­ »ç¿ëÇÏ´Â ÀڷᱸÁ¶¿Í ¾Ë°í¸®ÁòÀ» ÀÌ¿ëÇØ¼­ ½î½º ÄÚµåÀÇ Å©±â¸¦ ȹ±âÀûÀ¸·Î ÁÙÀϼö ÀÖ´Ù.

STL ¾Ë°í¸®Áò°ú ÄÁÅ×À̳ʵéÀº ±âÁ¸ÀÇ C/C++ ÀÇ Æ÷ÀÎÅÍ¿Í ¹è¿­¿¡µµ »ç¿ëÇÒ¼ö ÀÖÀ¸¸ç, º¯È¯ °¡´ÉÇϹǷΠÀ¯¿¬ÇÏ°Ô »ç¿ë°¡´ÉÇÏ´Ù. ±×¸®°í ÄÁÅ×ÀÌ³Ê¿Í ¾Ë°í¸®ÁòÀÌ ¼­·Î ºÐ¸®µÇ¾î ÀÖÀ½À¸·Î(¸¹Àº°æ¿ì), ÀÚ½ÅÀÌ ¾Ë°í¸®ÁòÀ» ¸¸µé¾î¼­ ÄÁÅ×À̳ʿ¡ Àû¿ë½ÃŰ´Â ÀÛ¾÷ÀÌ °¡´ÉÇÏ´Ù.

´ëºÎºÐÀÇ ¾Ë°í¸®Áò°ú ÀڷᱸÁ¶µéÀº ÃæºÐÈ÷ Å×½ºÆ®µÇ°í ÃÖÀûÈ­ µÇ¾î ÀÖ´Ù. ¶ÇÇÑ È¿À²ÀûÀÎ ÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ ´Ù¾çÇÑ Á¢±Ù ¹æ¹ýÀ» Á¦°øÇϹǷÎ, C++ À» »ç¿ëÇÑ STL ÀÌ ´À¸±°ÍÀ̶ó´Â ¿¹»óÀ» ±ú°í ¾à°£¸¸ ½Å°æÀ» ¾´´Ù¸é ¸Å¿ì È¿À²ÀûÀÎ Äڵ带 »ý¼ºÇÒ¼ö ÀÖ´Ù.


2.1.3.2절. ´ÜÁ¡

¿ì¼± µð¹ö±ëÀÌ ¾î·Æ´Ù. STLÀ» À߸ø»ç¿ëÇÒ°æ¿ì ¹ß»ýµÇ´Â ÄÄÆÄÀϽÃÀÇ ¿¡·¯ÄÚµå´Â ÅÛÇø´ ±í¼÷ÀÌ¿¡ ÀÖ´Â ³»ºÎÇÔ¼öµéÀÇ ¿¡·¯µéÀ» Ãâ·Â½ÃŲ´Ù. ÀÌ·¯ÇÑ ¿¡·¯°¡ ¹ß»ýÇϸé ÀÏ´Ü ¿¡·¯¸Þ½ÃÁöÀÇ ¾çµéµµ ¸¹À» »Ó´õ·¯, ÀÌÇØÀÚü°¡ ¾î·Á¿î ¸Þ½ÃÁöµéÀÌ´Ù. ÀÌ°É ÇØ°áÇÏ´Â ¹æ¹ýÀº Çϳª»ÓÀÌ´Ù. STL ¿¡ Àͼ÷ÇØÁö±â..

STLÀÌ À¯¿¬¼ºÀ» ±¸ÇöÇϱâ À§ÇÑ ÅÛÇø´ÀÇ °æ¿ì ÇÁ·Î±×·¥ÀÇ Å©±â¸¦ ¸Å¿ì Å©°Ô ¸¸µé¼ö ÀÖ´Ù. ¾ÆÁ÷Àº ÄÄÆÄÀÏ·¯°¡ ÅÛÇø´À» ±×¸® È¿À²ÀûÀ¸·Î ó¸®ÇÏÁö ¸øÇϱ⠶§¹®ÀÌ´Ù. ¿ª½Ã ºñ¿ëÀ» Àß °í·ÁÇÏ¿©¼­ È¿À²ÀûÀ¸·Î STLÀÇ ¾Ë°í¸®Áò°ú ÄÁÅ×À̳ʵéÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.

¹Ýº¹ÀÚ(³ªÁß¿¡ ´Ù·ê°ÍÀÓ, ÀÏÁ¾ÀÇ Æ÷ÀÎÅÍ)¿Í ÄÁÅ×À̳ʰ¡ ºÐ¸®µÇ¾î¼­ Á¸ÀçÇÑ´Ù. ÀÌ´Â ¾²·¹µå ÇÁ·Î±×·¡¹Ö½Ã ¹®Á¦¸¦ ¹ß»ýÇÒ ¼ÒÁö¸¦ °¡Áö°íÀÖ´Ù.


3절. Template

»ç½Ç ÅÛÇø´µµ ±×¸® ¸¸¸¸ÇÑ ³»¿ëÀÌ ¾Æ´Ï´Ù. Á»µÎ²¨¿î C++ Ã¥°°Àº °æ¿ì ¿Ø¸¸ÇÑ ¾ãÀº Ã¥ ÇÑ±Ç ºÐ·® Á¤µµ¸¦ ÇÒ¾ÖÇØ¼­ ÅÛÇø´À» ¼³¸íÇÑ´Ù. ÀÌ ¹®¼­´Â ÅÛÇø´ ÀÚü¸¦ ¼³¸íÇÏ´Â ¹®¼­´Â ¾Æ´Ï¹Ç·Î ±×·¸°Ô ÀÚ¼¼È÷ ¼³¸íÇÏÁö´Â ¾ÊÀ» °ÍÀÌ´Ù. ´Ù¸¸ STLÀ» Á»´õ ½±°Ô ÀÌÇØÇϵµ·Ï µ½´Â ¼öÁØ¿¡¼­¸¸ ¼³¸íÀ» ÇÒ°ÍÀÌ´Ù. ÅÛÇø´¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ´Ù¸¥ ¹®¼­³ª, Ã¥À» ÀÌ¿ëÇϵµ·Ï ÇÏÀÚ. (ºñ·Ï C ¿Í C++ À» ´Ù¸¥ ¾ð¾î¶ó°í ¸»À» Çϱä ÇÏÁö¸¸) C ¿¡ ºñÇØ¼­ C++ ¿¡¼­ Å©°Ô Ãß°¡µÈ °ÍÀÌ ÀÖ´Ù¸é ¹Ù·Î "Ŭ·¡½º" ¿Í "ÅÛÇø´" Á¤µµ°¡ µÉ°ÍÀÌ´Ù.


3.1절. Template ¿¡ ´ëÇØ¼­

¸¸¾à¿¡ ¿ì¸®°¡ int ÇüÀÇ ¼ýÀÚ¸¦ ¹Þ¾ÆµéÀÌ´Â A ¶ó´Â ÇÔ¼ö¸¦ ¸¸µé¾ú´Ù°í °¡Á¤À» ÇÏÀÚ. ÀÌ A ¶ó´Â ÇÔ¼ö´Â int ¾Æ±Ô¸ÕÆ®¸¦ ¹Þ¾ÆµéÀÏ °æ¿ì´Â ¹®Á¦°¡ ¾øÁö¸¸, ÀÌ A ¶ó´Â ÇÔ¼ö´Â ´ÜÁö int Çü¸¸À» ó¸®ÇÒ¼ö ÀÖ´Ù´Â ¹®Á¦Á¡À» °¡Áö°Ô µÈ´Ù. float, double µîÀÌ ÀÎÀÚ·Î µé¾î¿À°Ô µÇ¸é Á¦´ë·Î 󸮸¦ ÇÒ¼ö ¾øÀ»°ÍÀÌ´Ù. ÀÌ·²°æ¿ì ¾î¿¼ö ¾øÀÌ Àü¿ëÀÇ »õ·Î¿î ÇÔ¼ö¸¦ ¸¸µé¾î¾ß¸¸ ÇÒ°ÍÀÌ´Ù. ¹°·Ð C++ ÀÇ Æ¯¼ºÁß ÇϳªÀÎ ¸â¹öÇÔ¼öÀÇ ¿À¹ö·ÎµùÀ» ÀÌ¿ëÇÏ¸é ¾î´ÀÁ¤µµÀÇ ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇÒ¼ö ÀÖÀ»°ÍÀÌ´Ù. ±×·¯³ª ¸¸¾à struct ³ª, string, class µîÀ» ó¸®ÇÏ´Â ÇÔ¼ö¸¦ ¸¸µé¾î¾ß ÇÑ´Ù¸é? ÀÌÂë µÇ¸é ÇÔ¼ö ¿À¹ö·Îµù Á¤µµ·Î ±×¸® °£´ÜÇÏ°Ô ÇØ°áµÉ ¹®Á¦°¡ ¾Æ´Ï´Ù(ÇÁ·Î±×·¡¹Ö¿¡¼­ ´ëºÎºÐÀÇ °ÍµéÀÌ ±×·¸µíÀÌ ¹°·Ð ºÒ°¡´ÉÇÑ°Ç ¾Æ´Ï´Ù. ÇÏÁö¸¸ ³Ê¹« ¸¹Àº ºñ¿ëÀ̵ç´Ù. ³Ê¹« ¸¹Àº ½Ã°£, ³Ê¹« ¸¹Àº ³ë·ÂÀ» ÇÊ¿ä·Î ÇÑ´Ù)

¾î¶µç Template ÀÌ ¾Æ±Ô¸ÕÆ®·Î ÁÖ¾îÁö´Â Çü¿¡ °ü°è¾øÀÌ ¹Þ¾ÆµéÀϼö ÀÖ´Ù´Â °Í ¶§¹®¿¡, ƯÈ÷ µ¥ÀÌŸ ÀúÀå¼Ò(container)·Î À¯¿ëÇÏ°Ô ¾²ÀδÙ. STL ¿ª½Ã Template ÀÇ ÀÌ·± Ư¼ºÀ» ÀÌ¿ëÇØ¼­ ¹ü¿ëÀûÀ¸·Î »ç¿ë°¡´ÉÇÑ ÀúÀå¼Ò¸¦ Á¦°øÇÑ´Ù(vector, map, list, queue µîµî..)

STL ¿¡¼­´Â º¸Åë ÀÌ·¯ÇÑ ÀúÀå¼Ò¸¦ ¸¸µé±â À§Çؼ­ class template ¸¦ ÀÌ¿ëÇÏ¸ç ¾Ë°í¸®ÁòÀ» À§Çؼ­ ÇÔ¼ö template ¸¦ ÀÌ¿ëÇÑ´Ù. ÀúÀå¼Ò¸¦ À§Çؼ­ class template ¸¦ ÀÌ¿ëÇÏ´Â ÀÌÀ¯´Â class °¡ µ¥ÀÌŸºÎºÐ°ú ¸Þ½áµå ºÎºÐÀ» ºÐ¸®ÇÒ¼ö ÀÖÀ½À¸·Î ¾Æ¹«·¡µµ µ¥ÀÌŸ¸¦ ÀúÀåÇϱⰡ ¹æ¹ý»ó ´õ °£´ÜÇϱ⠶§¹®ÀÌ´Ù. ¾Ë°í¸®ÁòÀ» ÀÌ¿ëÇØ¼­ ÇÔ¼ö template ¸¦ ÀÌ¿ëÇÏ´Â ÀÌÀ¯´Â template ÀÇ Æ¯¼ºÀ» ÀÌ¿ëÇØ¼­ ÀÎÀÚ¿¡ °ü°è¾øÀÌ ¹ü¿ëÀûÀ¸·Î »ç¿ë°¡´ÉÇÑ ¾Ë°í¸®ÁòÀ» ¸¸µé¼ö Àֱ⠶§¹®ÀÌ´Ù.


3.2절. ÅÛÇø´ ÀÛ¼º

3.2.1절. ÇÔ¼ö ÅÛÇø´

ÀÛ¼º¹æ¹ýÀº °£´ÜÇÏ´Ù. C++ ¿¡¼­´Â ÅÛÇø´ÀÇ Á¦ÀÛÀ» À§Çؼ­ "template" ¶ó´Â Ű¿öµå¸¦ Á¦°øÇØÁØ´Ù.

¿¹Á¦ : myadd_template.cc

#include <string>

template <typename T>
T myadd(T x, T y)
{
	return x + y; 
}


int main()
{
	cout << myadd(4, 6) << endl;
	cout << myadd(1.6, 1.8) << endl;
}
				
À§ÀÇ ¿¹Á¦¸¦ Å×½ºÆ® ÇØº¸¸é µ¥ÀÌŸ Çü¿¡ °ü°è¾øÀÌ, '+' ¿¬»êÀÌ °¡´ÉÇÔÀ» ¾Ë¼ö ÀÖ´Ù. Áï myadd(2, 3), myadd(3.5, 5.98) µî int, float µîÀÇ µ¥ÀÌŸ Çü¿¡ ½Å°æ¾µÇʿ䰡 ¾øÀÌ ¿¬»êÀÌ °¡´ÉÇÏ´Ù. ¿©±â¿¡´Â '+' ¿¬»êÀÚ¸¦ »ç¿ëÇÒ¼ö ÀÖ´Â ¸ðµç ÀÚ·áÇüÀÌ »ç¿ë°¡´ÉÇÏ´Ù. ¿¹¸¦ µé¾î STL ¿¡¼­ Á¦°øÇÏ´Â string ÀÇ °æ¿ì ¹®ÀÚ¿­°£ ÀÇ '+' ¿¬»êÀÌ °¡´ÉÇÏ´Ù. ±×·¯¹Ç·Î ´ÙÀ½°ú °°ÀÌ ¹®ÀÚ¿­À» ´õÇϱâ À§Çؼ­µµ »ç¿ëÇÒ¼ö ÀÖÀ»°ÍÀÌ´Ù.
  
string b2="hello";
string b3=" world";
cout << myadd(b2, b3) << endl;
				
±×·¯³ª char * Çü°°Àº°æ¿ì´Â '+' ¿¬»êÀ» ÃëÇÒ¼ö ¾ø±â ¶§¹®¿¡ char *À» ÀÎÀÚ·Î ÃëÇÒ°æ¿ì¿¡´Â ¿¬»êÀÚ ¿À·ù¸¦ ¹ß»ý½Ã۸ç ÄÄÆÄÀÏ ½ÇÆÐÇÒ°ÍÀÌ´Ù.

±×¸®°í À§ÀÇ ¿¹Á¦´Â ¶Ç´Ù¸¥ ¹®Á¦¸¦ °¡Áö°í ÀÖ´Ù typename T °¡ ¼­·Î °°Àº Á¾·ùÀÇ ÇüÀ» °¡Á®¾ß µÈ´Ù´Â °ÍÀÌ´Ù. (int, int), (float, float), (string, string) µîÀ» »ç¿ëÇϴµ¥ À־´Â ¹®Á¦°¡ ¾øÁö¸¸ (int, float) ¿Í °°ÀÌ ¼­·Î ´Ù¸¥ ÇüÀ» »ç¿ëÇÒ¶§´Â ¹®Á¦°¡ ¹ß»ýÇÒ°ÍÀÌ´Ù. ¿Ü³ÄÇϸé typename T ¿¡ ´ëÇØ¼­ ÀÌ·¯ÇÑ ¾Æ±Ô¸ÕÆ®´Â Áö¿øÀÌ µÇÁö ¾Ê±â ¶§¹®¿¡, À§ÀÇ ¾Æ±Ô¸ÕÆ®¸¦ ó¸®ÇÒ¼ö ÀÖ´Â ¾î¶°ÇÑ ÇÔ¼ö¿øÇüµµ ¹ß°ßÇÒ¼ö ¾ø´Ù´Â ¿À·ù ¸Þ½ÃÁö¸¦ Ãâ·ÂÇϸç ÄÄÆÄÀÏ ¿¡·¯°¡ ¹ß»ýÇÒ°ÍÀÌ´Ù.

ÀÌ·²°æ¿ì¿¡´Â ¿¬»êÀÚ ¿À¹ö·ÎµùÀ» ÅëÇÏ¿© ÇØ°á °¡´ÉÇÏ´Ù. ´ÙÀ½°ú °°Àº ¿¬»êÀÚ '+' ¿¡ ´ëÇØ¼­ Á¤ÀǸ¦ ÇØµÎ¸é µÈ´Ù.

bool operator+(myadd<double, long> &x)
{
    return x.first + x.second;
}
				
¹°·Ð À̰æ¿ì¿¡´Â ÇÔ¼ö ÅÛÇø´À¸·Î´Â ¾ÈµÇ°í, Ŭ·¡½º ÅÛÇø´À» ÀÛ¼ºÇØ¾ß ÇÒ°ÍÀÌ´Ù.


3.2.2절. Ŭ·¡½º ÅÛÇø´

Ŭ·¡½º ÅÛÇø´ÀÇ »ç¿ë¿ª½Ã ¸Å¿ì °£´ÜÇÏ´Ù. ¾Æ·¡´Â ¹Ù·Î À­ Àý¿¡¼­ »ç¿ëµÇ¾ú´ø ¿¹Á¦¸¦ ¿¬»êÀÚ ¿À¹ö·Îµù ±îÁö Æ÷ÇÔ½ÃÄѼ­, double, long ¿¬»ê±îÁö °¡´ÉÇϵµ·Ï ¾à°£ ¼öÁ¤ÇÑ °ÍÀÌ´Ù.

¿¹Á¦ : class_tem.cc

#include <string>

template <typename T1, typename T2>
class cal
{
    public:
        bool operator+(cal<double, long> &x)
        {
            return x.first + x.second;
        }

        void sum(T1 x, T2 y)
        {
            cout << x + y << endl;
        }

        void dif(T1 x, T2 y)
        {
            cout << x - y << endl;
        }

};

int main()
{
    cal<int, int> data;
    data.sum(1, 2);
    data.sum('a', 'b');

    cal<double, long> data2;
    data2.sum(1.2, 2);

    cal<double, double> data3;
    data3.dif(1.2, 1.5);
}
				

ÇÏÁö¸¸ Ŭ·¡½º ÅÛÇø´ÀÇ ÁøÁ¤ÇÑ »ç¿ë¿ëµµ´Â µ¥ÀÌŸ ÀúÀå¼Ò(container)¸¦ ¸¸µé±â À§ÇÑ ¿ëµµÀÌ´Ù. ¸¸¾à queue Çü½ÄÀ» Áö¿øÇÏ´Â µ¥ÀÌŸ ÀúÀå¼Ò¸¦ ¸¸µé°í Áö¿øÇؾßÇÒ µ¥ÀÌŸ ÇüÀÇ Á¾·ù°¡ ¿©·¯°¡Áö¶ó¸é, ¿ì¸®´Â µ¥ÀÌŸ ÇüÀÇ Á¾·ùÀÇ ¼ö¸¸Å­ÀÇ ÇÔ¼öȤÀº Ŭ·¡½º¸¦ ¸¸µé¾î¾ß ÇÒ°ÍÀÌ´Ù. ÇÏÁö¸¸ Ŭ·¡½º ÅÛÇø´À» »ç¿ëÇϸé ÀÌ·¯ÇÑ ¼ö°í¸¦ ´ú¼ö ÀÖ´Ù. ÅÛÇø´À» ÀÌ¿ëÇÑ container ÀÇ Á¦ÀÛÀ» À§Çؼ­ ´Ù¾çÇÑ µ¥ÀÌÅÍÇüÀ» ÀúÀåÇÒ¼ö ÀÖ´Â arrary µ¥ÀÌŸ ±¸Á¶¸¦ °¡Áö´Â ¾î¶² ÀúÀå¼Ò¸¦ ¸¸µé¾î º¸µµ·Ï ÇϰڴÙ.

¿ì¸®´Â Ŭ·¡½º ÅÛÇø´ ¸¦ ÀÌ¿ëÇØ¼­ circular buffer ±¸Á¶¸¦ °¡Áö´Â queue ÀڷᱸÁ¶¸¦ ±¸ÇöÇÒ°ÍÀÌ´Ù. circular buffer ´Â ¹è¿­À» ÀÌ¿ëÇÑ buffer ·Î ´ÙÀ½°ú °°Àº ±¸Á¶¸¦ °¡Áø´Ù.

    +- data1    +- data3                      +- data8  
    |           |                             | 
 +-----+-----+-----+-----+-----+-----+-----+-----+
 |  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |
 +-----+-----+-----+-----+-----+-----+-----+-----+
    |     | 
    |     +- data2
    +- data9
				
À̰ÍÀº °í¸®Ã³·³ ¼øÈ¯(circular) ÇÏ´Â ±¸Á¶·Î 8°³±îÁöÀÇ ¹è¿­À» ´Ùä¿ì°í ³ª¸é ´Ù½Ã ¹è¿­ÀÇ Ã³À½À¸·Î À̵¿Çؼ­ °ªÀ» ä¿ì´Â ½ÄÀ¸·Î °è¼Ó ¼øÈ¯ ÇÑ´Ù. ring ±¸Á¶¶ó°í º¸¸é µÉ°ÍÀÌ´Ù. ÀÌ circular buffer ´Â ¸Å¿ì ±¸ÇöÇϱⰡ ½¬¿ì¸ç ƯÈ÷ queue ¸¦ ±¸ÇöÇϴµ¥ ÀûÇÕÇÏ´Ù. ¹°·Ð ¹è¿­ÀÇ Å©±â¿¡ Á¦ÇÑÀÌ ÀÖÀ»¼ö ÀÖÀ½À¸·Î ¹è¿­ÀÇ Å©±â°áÁ¤¿¡ ½ÅÁßÇØ¾ß Çϸç, ¾ÆÁ÷ ÀÐÁö ¾ÊÀº µ¥ÀÌŸ¸¦ µ¤¾î¾²Áö ¾Êµµ·Ï(Çѹٲ µ¹¾ÒÀ»°æ¿ì) ¾ÈÀüÀåÄ¡¸¦ ¸¶·ÃÇØµÎ¾î¾ß ÇÒ°ÍÀÌ´Ù. °¡Àå °£´ÜÇÏ°Ô ±¸Çö°¡´ÉÇÑ ¾ÈÀüÀåÄ¡´Â µ¥ÀÌŸ¸¦ ³Ö°í ÀÐÀ»¶§ ¸¶´Ù ÇöÀç µ¥ÀÌŸÀÇ ÃÑ °¹¼ö¸¦ °è»êÇÏ´Â ¹æ¹ýÀϰÍÀÌ´Ù. ±×·¯³ª À̰æ¿ì¿¡´Â ÃÑ °¹¼ö¸¦ °è»êÇϱâ À§Çؼ­ ¹Ù»Û ´ë±â »óÅ¿¡ ³õÀÏ °¡´É¼ºÀÌ ÀÖÀ½À¸·Î ÀÌ¿Í ÇÔ²² Pthread ÀÇ ¹ÂÅØ½º¿Í Á¶°Çº¯¼ö¸¦ ÀÌ¿ëÇÏ´Â°Ô ´õÁÁÀº ¹æ¹ýÀÌ µÉ°ÍÀÌ´Ù. ȤÀº ¼¼¸¶Æ÷¾î¸¦ ÀÌ¿ëÇÒ¼öµµ ÀÖÀ»°ÍÀÌ´Ù.

À̹ø¿¹Á¦´Â (¹öÆÛ¿¡)ÀбâÀü¿ë ¾²·¹µå¿Í ¾²±âÀü¿ë ¾²·¹µå·Î ±¸¼ºµÈ ÇÁ·Î±×·¥À» ¸¸µé°ÍÀÌ´Ù. ±×¸®°í Àбâ/¾²±â µ¿±âÈ­¸¦ À§Çؼ­ ¹ÂÅØ½º¿Í Á¶°Çº¯¼ö¸¦ »ç¿ëÇÏ°Ô µÉ°ÍÀÌ´Ù. ¾²·¹µå¿Í ¹ÂÅØ½º Á¶°Çº¯¼ö¿¡ °ü·ÃµÈ ³»¿ëÀ» ÀÌ»çÀÌÆ®ÀÇ ´Ù¸¥ ¹®¼­µéÀ» Âü°íÇϱ⠹ٶõ´Ù.

ÀÌ ÇÁ·Î±×·¥Àº 2°³ÀÇ ÆÄÀÏ·Î ÀÌ·ç¾îÁú°ÍÀÌ´Ù. Çϳª´Â container Á¦ÀÛÀ» À§ÇÑ ÅÛÇø´ Ŭ·¡½º¸¦ °¡Áö´Â buff.h ´Ù¸¥ Çϳª´Â main ÇÔ¼ö¸¦ Æ÷ÇÔÇÏ´Â main.cc ÀÌ´Ù.

¿¹Á¦ : buff.h

#include <string>
#include <pthread.h>

template <typename T>
class array
{
    private:
        // ÀúÀå¼ÒÀÇ ¹è¿­Å©±â´Â 10À¸·Î °íÁ¤½ÃŲ´Ù.  
        T container[10];
        int member_num, index_num;

        pthread_mutex_t mutex;
        pthread_cond_t  thread_cond;
    public:

        // »ý¼ºÀÚ
        // mutex Àá±Ý°ú, Á¶°Çº¯¼öÀÇ »ç¿ëÀ» À§ÇÑ ÃʱâÈ­¸¦ ÇÑ´Ù.
        array()
        {
            member_num = 0;
            index_num = -1;
            pthread_mutex_init(&mutex, NULL);
            pthread_cond_init(&thread_cond, NULL);
        }

        // ÀúÀå¼Ò container ¿¡ µ¥ÀÌŸ¸¦ 
        // ÀÔ·ÂÇϱâ À§ÇÑ ÇÔ¼ö 
        // ¸¸¾à 10¹øÂ° ¹è¿­±îÁö ´Ù ½è´Ù¸é 
        // ´Ù½Ã 0¹øÂ° ¹è¿­ºÎÅÍ ¾²±â ½ÃÀÛÇÑ´Ù. 
        void push_back(T x)
        {
            pthread_mutex_lock(&mutex);
            cout << "push --> " << member_num%10 << endl;
            container[member_num%10] = x;
            member_num ++;
            pthread_cond_signal(&thread_cond);
            pthread_mutex_unlock(&mutex);
        }

        // ÀúÀå¼Ò¿¡ ÀÖ´Â µ¥ÀÌŸ¸¦ Àоî¿Â´Ù. 
        // °¡ÀåÃÖ±ÙÀÇ µ¥ÀÌŸ¸¦ °¡Á®¿À±â À§Çؼ­ 
        // ÂüÁ¶ÇÒ index °ªÀ» °¡Áö´Â º¯¼ö index_num À» 
        // »ç¿ëÇÑ´Ù. 
        // pop() ¸¦ Çѹø È£ÃâÇϸé index_num À» 1 Áõ°¡ ½ÃÄѼ­ 
        // ´ÙÀ½Çì È£ÃâÇÒ¶§´Â ´ÙÀ½ µ¥ÀÌŸ °ªÀ» °¡Á®¿Àµµ·Ï ÇÑ´Ù.  
        // ¸¸¾à ÀúÀå¼Ò¿¡ µé¾îÀÖ´Â µ¥ÀÌŸÀÇ Å©±â°¡ 0À̶ó¸é 
        // cond_wait ·Î ½Ã±×³ÎÀ» ±â´Ù¸°´Ù. 
        T pop() 
        {
            T return_container;
            pthread_mutex_lock(&mutex);
            if (size() == 0)
            {
                pthread_cond_wait(&thread_cond, &mutex);
            }
            index_num++;
            return_container =  container[index_num%10];
            pthread_mutex_unlock(&mutex);

            return return_container;
        }

        // ÀúÀå¼ÒÀÇ Å©±â¸¦ µÇµ¹·ÁÁØ´Ù. 
        int size()
        {
            return member_num - (index_num + 1);
        }
};
				

¿¹Á¦ : main.cc

#include "arr_tem.h"
#include <string>
#include <stdio.h>
#include <unistd.h>

typedef struct data
{
    int     data_num;
    string  name;
} man_info;

array<struct data> buff;

void *push(void *data)
{
    int i = 0;
    char name[12];
    man_info info;

    while(1)
    {
        i++;
        info.data_num = i;
        sprintf(name, "man_%d", i);
        info.name = name;
        buff.push_back(info);
        if (buff.size() == 10)
        {
            cout << "´ë±âÀοøÀ» ÃʰúÇß½À´Ï´Ù. Àá½Ã ±â´Ù·ÁÁÖ¼¼¿ä." << endl;
            sleep(12);   
        }
        else
        {
            sleep(random()%5);
        }
    }
}

void *pop(void *data)
{
    man_info info;
    while(1)
    {
        info = buff.pop(); 
        cout << "ÇöÀç ´ë±â Àοø : " << buff.size() << endl;
        cout << info.data_num << " : " << info.name << endl;
        sleep(3);
    }
}   
    
int main()
{
    int thr_id;
    int a, b, status;
    pthread_t p_thread[2];

    thr_id = pthread_create(&p_thread[0], NULL, push, (void *)&a);
    thr_id = pthread_create(&p_thread[1], NULL, pop, (void *)&b);

    pthread_join(p_thread[0], (void **)status);
    pthread_join(p_thread[1], (void **)status);
}
				

ÄÄÆÄÀÏ ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù.

[root@localhost circular]# g++ -o main main.cc -lpthread
				

À§ÀÇ ¿¹Á¦´Â ¸éÁ¢¿¹Á¦ÀÌ´Ù. ¸éÁ¢À» º¸±â À§Çؼ­ ÇǸéÁ¢ÀÚ´Â ´ë±â½Ç¿¡¼­ ±â´Ù¸®°í ÀÖ¾î¾ß ÇÑ´Ù. ´ë±â½ÇÀÇ Á¤¿øÀº 10¸íÀ̹ǷΠ10¸íÀÌ»óÀÌ µé¾î¿ÀÁö ¸øÇÏ°Ô ´ë±â½Ç¹Û¿¡¼­ °ü¸®¸¦ ÇØÁÖ¾î¾ß ÇÑ´Ù. ÇÑ»ç¶÷ÀÌ ¸éÁ¢º¸´Âµ¥ °É¸®´Â ½Ã°£Àº 3ÃÊÀÎ ¹Ý¸é ¸éÁ¢º¸·¯ ¿À´Â »ç¶÷Àº 0-5ÃÊ °£°ÝÀ¸·Î ·£´ýÇÏ°Ô µµÂøÇÑ´Ù. ±×·¯¹Ç·Î ´ë±â½Ç°ü¸®¸¦ ÇØÁÖÁö ¾ÊÀ¸¸é ¾ðÁ¨°¡´Â ´ë±â½ÇÀÌ ²ËÂ÷¹ö¸± °ÍÀÌ´Ù. ±×°É ¸·±â À§Çؼ­ »ç¶÷À» ¹Þ¾ÆµéÀ϶§ ¸¶´Ù. ´ë±â½ÇÀÇ Å©±â¸¦ Á¶»çÇØ¼­ ²Ëá´Ù¸é 15ÃÊ µ¿¾ÈÀº ¹«Á¶°Ç ÁøÀÔ½ÃŰÁö ¾Êµµ·Ï Çß´Ù. ¹Ù»Û ´ë±â¸¦ ¸·±â À§Çؼ­ size °¡ 0Àϰæ¿ì¿¡´Â Á¶°Çº¯¼ö·Î signal ÀÌ Àü´ÞµÉ¶§±îÁö ±â´Ù¸°´Ù.

À§ÀÇ ¿¹Á¦´Â circular buffer ¸¦ ÀÌ¿ëÇÑ queue¸¦ ÀÌ¿ëÇØ¼­ ±¸ÇöÇß´Ù. Áö±ÝÀº ¸éÁ¢ÀÚÀÇ Á¤º¸¸¦ À§Çؼ­ ±¸Á¶Ã¼¸¦ »ç¿ëÇϰí ÀÖÁö¸¸ ¿©·¯ºÐÀÌ ¸¶À½¸¸ ¸Ô´Â´Ù¸é int Çü, Ŭ·¡½º, char *Çü À» °£´ÜÈ÷ ¼±¾ð¸¸ ÇÔÀ¸·Î½á »ç¿ëÇÒ¼ö ÀÖ´Ù.

À§ÀÇ ¿¹Á¦´Â queue °¡ ²ËÂ÷¸é ¹«Á¶°Ç 12Ãʸ¦ ±â´Ù¸®°Ô µÇ¾î Àִµ¥, ÀÌ¿ÕÀ̸é queue °¡ ºñ´Â Áï½Ã ´ÙÀ½ µ¥ÀÌŸ¸¦ ¹Þ¾ÆµéÀ̵µ·Ï ÇÏ´Â°Ô Á»´õ È¿À²ÀûÀÏ °ÍÀÌ´Ù. À̰ÍÀº ¿ª½Ã Á¶°Çº¯¼ö¸¦ ÀÌ¿ëÇÏ¸é °¡´ÉÇÏ´Ù. À̰ÍÀº °£´ÜÇÏ´Ï °¢ÀÚ ±¸ÇöÇØº¸µµ·Ï ÇÑ´Ù. ±×¸®°í ¹è¿­ÀÇ Å©±â¸¦ 10À¸·Î °íÁ¤½ÃÄÑ ³ù´Âµ¥, ÀÌ¿ÕÀ̸é new ³ª malloc À¸·Î ÇÒ´çÇÒ¼ö ÀÖµµ·Ï ¸¸µå´Â°Ô ÁÁÀ»°ÍÀÌ´Ù. ½Ã°£ÀÌ ³²À¸¸é ÃÑ ¸éÁ¢ÀÚ¸¦ ÁöÁ¤ÇÏ°í ¸ðµç ¸éÁ¢ÀÚ¿¡ ´ëÇÑ ¸éÁ¢ÀÌ ³¡³ª¸é Á¾·áÇϵµ·Ï ¼öÁ¤ÇØ º¸µµ·Ï ÇÏÀÚ.

ÀÌó·³ Ŭ·¡½º ÅÛÇø´ À» »ç¿ëÇÏ¸é ´Ù¾çÇÑ µ¥ÀÌŸÇüÀ» ÀúÀåÇÒ¼ö ÀÖ´Â container ¸¦ ¼Õ½±°Ô ÀÛ¼ºÇÒ¼ö ÀÖ´Ù. ¿©±â¿¡¼­´Â container ¸¦ ÀÛ¼ºÇϱâ À§Çؼ­ ¹è¿­(array)¸¦ »ç¿ëÇϰí Àִµ¥, STL¿¡¼­ Á÷Á¢ Á¦°øÇÏ´Â vector, deque °°Àº °ÍµéÀ» »ç¿ëÇÏ¸é ´õ¿í´õ À¯¿¬ÇÏ°Ô ¸¸µé¼ö ÀÖ´Ù.


4절. °á·Ð

STLÀÇ ÃÖ´ë »ç¿ëó´Â Àû´çÈ÷ È¿À²ÀûÀÎ ÀڷᱸÁ¶¸¦ ¸¸µé°í ¸¸µé¾îÁø ÀڷᱸÁ¶¿¡ ¾Ë°í¸®ÁòÀ» Àû¿ë½ÃŰ´Â ÀÛ¾÷ÀÌ´Ù. STLÀº ÀÌ·¯ÇÑ ÀÛ¾÷À» ¸Å¿ì È¿À²ÀûÀ¸·Î ºü¸¥½Ã°£¿¡ ³¡³¾¼ö ÀÖµµ·Ï µµ¿ÍÁØ´Ù. ¸Ó¸®¿¡ »ý°¢ÇÑ´ë·Î ±¸ÇöÀÌ °¡´ÉÇÏ´Ù°í º¸¸é µÉ°ÍÀÌ´Ù.

º¸Åë ÀÌ·± ÀڷᱸÁ¶¿Í ¾Ë°í¸®ÁòÀº Ưº°ÇÑ °æ¿ì°¡ ¾Æ´Ï¸é ºñ½Áºñ½ÁÇÏ´Ù. ±×·¯³ª ºñ½ÁÇÔ¿¡µµ ºÒ±¸ÇÏ°í °ÅÀÇ ¸Å¹ø ÀڷᱸÁ¶¿Í ¾Ë°í¸®ÁòÀ» ´Ù½Ã ¸¸µé¾î¾ß ÇÒ°ÍÀÌ´Ù. ÀÚÄ© ÇÊ¿ä ¾ø´Â ´Ü¼ø ³ë°¡´Ù¿¡ ½Ã°£À» »©¾Ñ±æ¼ö°¡ ÀÖ´Ù. STLÀ» ¹è¿ì°í ³ª¸é ÀڷᱸÁ¶¿Í ¾Ë°í¸®ÁòÀ» ¼³°èÇϰí ÄÚµùÇÏ´Â°Ô Áñ°Å¿ö Áú°ÍÀÌ´Ù.

EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.