STL - sequences container
ÃÑ ÆäÀÌÁö ¼ö : 3224

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



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

<a href="/modules/moniwiki/wiki.php/manSearch?google=none&name=STL">STL</a>(2) - Seuences ÄÁÅ×À̳Ê

STL(2) - Seuences ÄÁÅ×À̳Ê

À± »ó¹è

dreamyun@yahoo.co.kr



1절. Container ¿¡ ´ëÇØ¼­

STL À» ¼³¸íÇϸ鼭 µîÀåÇÏ´Â ÄÁÅ×À̳Ê(ÀúÀå¼Ò)¶õ °´Ã¼¸¦ ¿ø¼Ò·Î ÀúÀåÇÒ¼ö ÀÖ´Â ¿µ¿ªÀ» ¸»ÇÑ´Ù. À̴ ƯÁ¤ µ¥ÀÌŸ ŸÀÔ¸¸À» ÀúÀåÇÒ¼ö ÀÖ´Â ¹è¿­°ú´Â »ó´çÈ÷ Ʋ¸°°³³äÀÌ´Ù. C++(ȤÀº °´Ã¼ÁöÇâÇùÖ) À» ÇØºÃ´Ù¸é ¾Ë°ÚÁö¸¸ ´Ü¼øÈ÷ ¸»Çؼ­ °´Ã¼¶õ ¹¦»çµÉ¼ö ÀÖ´Â ¸ðµç »ç¹°À» ¸»ÇÑ´Ù. ÀÌ·¯ÇÑ °´Ã¼¸¦ ¿ø¼Ò·Î ÀúÀåÇÒ¼ö Àִٴ Ư¼º¶§¹®¿¡ ÄÁÅ×À̳ʴ ¸ðµç Á¾·ùÀÇ µ¥ÀÌŸÀúÀåÀÌ °¡´ÉÇϵµ·Ï µÇ¾îÀÖ´Ù. ÀÌ·¯ÇÑ Æ¯¼ºÀº ¾ÕÀÇ STL(1)¿¡¼­ ¾ð±ÞÇßµíÀÌ C++ Template À» ÀÌ¿ëÇØ¼­ ±¸ÇöµÈ´Ù(´õ ÀÚ¼¼È÷ ¸»ÇÏÀÚ¸é Class Template).

STL Àº ´Ù¾çÇÑ ÀڷᱸÁ¶·Î »ç¿ëµÉ¼ö ÀÖ´Â ¾à 10°¡Áö Á¤µµÀÇ ÄÁÅ×À̳ʵéÀ» Á¦°øÇÑ´Ù. ¿©±â¿¡´Â ¹è¿­À» ÀϹÝÈ­ ½ÃŲ vector, queue ·Î »ç¿ë°¡´ÉÇÑ deque, ¿ä¼Ò¸¦ °¡¸£Å°´Â ÷ÀÚ·Î int Çü´ë½Å¿¡ ´Ù¸¥ Çü(char * À̳ª string)À» »ç¿ëÇÒ¼ö ÀÖ´Â map µî.. ÀÌÀÖÀ¸¸ç, ÀÌ·¯ÇÑ ´Ù¾çÇÑ ÄÁÅ×À̳ʵéÀ» »ç¿ëÇÏ¿©¼­ ½±°Ô È®Àå °¡´ÉÇÑ ÀڷᱸÁ¶¸¦ ´Ü ¸îÁÙÀÇ ÄÚµùÀ¸·Î ½±°Ô ±¸ÇöÇÒ¼ö ÀÖ´Ù.

ÀÌ·¯ÇÑ 10°¡Áö Á¤µµ µÇ´Â ÄÁÅ×À̳ʵéÀº ´Ù½Ã Sequence ÄÁÅ×À̳ʿÍ, Association ÄÁÅ×À̳ʷΠũ°Ô ³ª´­¼ö ÀÖ´Ù. ¾ÕÀ¸·Î ÀÌ µÎ°¡Áö Á¾·ùÀÇ ÄÁÅ×À̳ʸ¦ ±âÁØÀ¸·Î ÇØ¼­ ´Ù¾çÇÑ ÄÁÅ×À̳ʵéÀÇ »ç¿ë¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇÒ°ÍÀÌ´Ù. ±×·¯³ª À̹ø¹®¼­¿¡¼­´Â Sequence ÄÁÅ×À̳ʸ¸À» ´Ù·ê °ÍÀ̸ç Association ÄÁÅ×À̳ʿ¡ ´ëÇÑ ³»¿ëÀº ´ÙÀ½ ±â»ç¿¡¼­ ´Ù·ç°Ô µÉ°ÍÀÌ´Ù.


2절. Sequence ÄÁÅ×À̳Ê

2.1절. Sequence ÄÁÅ×À̳ʶõ

Sequence ÄÁÅÍÀ̳ʿ¡´Â vector, deque, list, stack µîÀÌ Æ÷ÇԵǾî ÀÖ´Ù. À̵éÀ» Sequence ¶ó°í ºÎ¸£´Â ÀÌÀ¯´Â ¹è¿­°ú °°ÀÌ ¼±ÇüÀûÀ¸·Î µ¥ÀÌŸ°¡ ³ª¿­µÇ±â ¶§¹®ÀÌ´Ù. °¢ ÄÁÅ×À̳ÊÀÇ À̸§¿¡¼­ ´«Ä¡¸¦ ë°ÚÁö¸¸ deque ´Â queue ÀڷᱸÁ¶¸¦ À§Çؼ­, list ´Â linked list, stack ´Â stack ÀڷᱸÁ¶¸¦ Áö¿øÇÒ¼ö ÀÖ´Â ÄÁÅ×À̳ÊÀÌ´Ù. À̵é Sequence ÄÁÅ×À̳ʵéÀº ¹è¿­°ú ¸Å¿ì ºñ½ÁÇÑ ¼ºÁúÀ» Áö´Ï°í ÀÖÀ¸¸ç, ¹è¿­Ã³·³ ÷ÀÚ·Î Á¢±ÙÀÌ °¡´ÉÇÏ´Ù.

ÄÁÅ×À̳ʵéÀº ´ëºÎºÐ °øÅëÀÇ ÀÎÅÍÆäÀ̽º(ÇÔ¼ö)¸¦ Á¦°øÇÑ´Ù. ÇÔ¼öÀÇ À̸§µµ ¶È°°°í, ÇÏ´ÂÀϵµ °°Àº°æ¿ì°¡ »ó´çÈ÷ ¸¹´Ù. ±×·¯¹Ç·Î ÇϳªÀÇ ÄÁÅ×À̳ʸ¦ »ç¿ëÇÏ´Â ¹ý¸¸ È®½ÇÇÏ°Ô ÀÍÇôµµ, ³ª¸ÓÁö ÄÁÅ×À̳ʵéÀº º°·Î ¾î·ÆÁö ¾Ê°Ô ÀÍÈú¼ö ÀÖÀ»°ÍÀÌ´Ù. (¿¹¸¦µé¾î vector ¿¡¼­ ¸¶Áö¸·¿¡ ¿ø¼Ò ÀÔ·ÂÀ» À§Çؼ­ ¾²ÀÌ´Â push_back() Àº list, deque, stack µî¿¡µµ Á¸ÀçÇϸç, µ¿ÀÏÇÑ ÀÏÀ» ÇÑ´Ù.


2.1.1절. vector

2.1.1.1절. Ư¡

vector Àº map °ú ÇÔ²² °¡Àå ÀÚÁÖ »ç¿ëµÇ´Â ÄÁÅ×À̳ÊÀÌ´Ù. ´Ü¼øÈ÷ ¹è¿­À» ¸ðµç ÀÚ·áÇüÀ» ¿ø¼Ò·Î °¡Áú¼ö ÀÖµµ·Ï ÀϹÝÈ­ ½ÃŲ°ÍÀ̶ó°í º¸¸éµÈ´Ù. ¹è¿­°ú °°ÀÌ Ã·ÀÚ¿¬»êÀÌ °¡´ÉÇÏ´Ù. °¢°¢ÀÇ ¿ä¼Ò¿¡ ·£´ýÇÏ°Ô Á¢±ÙÀÌ °¡´ÉÇϸç, vector ÀÇ ¸¶Áö¸· ¿ä¼Ò¸¦ »èÁ¦Çϴµ¥´Â »ó¼ö½Ã°£ÀÌ ¼Ò¿äµÈ´Ù. ¹Ý¸é óÀ½°ú Áß°£¿¡ ÀÖ´Â ¿ä¼Ò¸¦ »èÁ¦Çϴµ¥¿¡´Â linear time(¼±Çü½Ã°£) ÀÌ ¼Ò¿äµÈ´Ù.

óÀ½°ú Áß°£¿¡ ÀÖ´Â ¿ä¼Ò¸¦ »èÁ¦Çϴµ¥¿¡ linear time ÀÌ °É¸®´Â ÀÌÀ¯´Â ¹è¿­°ú ¸Å¿ì ºñ½ÁÇÏ°Ô ¸¸¾à Áß°£¿¡ ÀÖ´Â ¿ä¼Ò¸¦ »èÁ¦ ÇßÀ»°æ¿ì ±× µÚ¿¡ ÀÖ´Â ¿ä¼ÒµéÀ» ¸ðµÎ ÇÑÄ­¾¿ ¾ÕÀ¸·Î ¹Ð¾î³Ö¾î¾ß ÇÏ´Â ¿¬»êÀ» ÇÊ¿ä·Î Çϱ⠶§¹®ÀÌ´Ù(Áï ¸¶Áö¸·¿¡ ¿ä¼Ò¸¦ Ãß°¡Çϰųª »èÁ¦ÇÒ¶§ È¿À²ÀûÀÓ).

±×·¯¹Ç·Î ¸¸¾à Áß°£¿¡ ÀÖ´Â ¿ä¼Ò¸¦ ÀÚÁÖ »èÁ¦ÇÏ´Â ¿¬»êÀÌ ÇÊ¿äÇÒ°æ¿ì¿¡ vector ¸¦ »ç¿ëÇÏ´Â°Ç ¸Å¿ì ºñÈ¿À²ÀûÀÌ µÉ¼ö ÀÖ´Ù. ÀÌ·²°æ¿ì¿¡´Â list °°Àº ´Ù¸¥ ÄÁÅ×À̳ʸ¦ »ç¿ëÇØ¾ß ÇÒ°ÍÀÌ´Ù.

STL¿¡¼­ Á¦°øÇÏ´Â ´Ù¸¥ ÄÁÅ×À̳ʵé°ú ¸¶Âù°¡Áö·Î vector µµ ÀÚ½ÅÀÌ ¾Ë¾Æ¼­ ¸Þ¸ð¸® °ü¸®¸¦ ÇÑ´Ù.


2.1.1.2절. ¼±¾ð

vector ÄÁÅ×À̳ʴ ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ¾î ÀÖ´Ù.

표 1. ÅÛÇø´ Parameters

Parameter¼³¸í±âº»°ª
T¹éÅÍÀÇ ¿ø¼Ò·Î µé¾î°¡°ÔµÉ °ªÀÇ Çü(type)ÀÌ´Ù. ÀÌ °ªÀº °´Ã¼°¡ µÉ¼öµµ ÀÖ´Ù. 
Allocº¤ÅÍÀÇ ÇÒ´ç±â(allocator)ÀÌ´Ù. ÀÌ ÇÒ´ç±â¸¦ ÅëÇØ¼­ ÀÚµ¿À¸·Î ¸Þ¸ð¸® °ü¸®¸¦ ÇÑ´Ù.alloc
º¸ÅëÀº ±âº» ÇÒ´ç±â¸¦ »ç¿ëÇÏ°Ô µÊÀ¸·Î ´ÙÀ½°ú °°ÀÌ º¤Å͸¦ ¸¸µé¾î¼­ »ç¿ëÇÒ¼ö ÀÖ´Ù.
vector<int> myint;
vector<class myobj> myobj;
vector<vector <myint> > v_myint; 
					
À§ÀÇ ¼±¾ðÀ» º¸¸é ¾Ë°ÚÁö¸¸ int °°Àº ÀÚ·áÇüÀº ¹°·ÐÀ̰í class, ¶Ç´Ù¸¥ ÄÁÅ×À̳ʱîÁöµµ ¸â¹ö ¿ä¼Ò·Î °¡Áú¼ö ÀÖ´Ù. vectorÀÇ vector À» »ç¿ëÇÏ¸é ¸¶Ä¡ 2Â÷¿ø ¹è¿­Ã³·³ »ç¿ëÇÒ¼ö ÀÖÀ»°ÍÀÌ´Ù.

¶ÇÇÑ vector Àº ÃÖÃÊ¿¡ »ý¼ºµÉ¶§, ±âº»ÀûÀÎ Å©±â¿Í ä¿öÁú °ªÀ» ÁöÁ¤ÇÒ¼ö ÀÖ´Ù.

vector<string> mydata(20, "hello");
					
À§ÀÇ °æ¿ì mydata ÀÇ Å©±â´Â 20¸¸Å­ Å©±â°¡ ¹Ì¸® ÇÒ´çµÇ°í, "hello"·Î ¸ðµÎ ÃʱâÈ­ µÉ°ÍÀÌ´Ù.


2.1.1.3절. ÀÚÁÖ »ç¿ëµÇ´Â ¸â¹ö ÇÔ¼öµé

À§¿¡¼­ º¸¸é vector ¸¦ ´ÜÁö ƯÁ¤ Çü(type)¿¡ °ü°è¾øÀÌ ¸â¹ö ¿ä¼Ò¸¦ °¡Áú¼ö ÀÖ´Â ¹è¿­ Á¤µµ·Î¸¸ Ä¡ºÎÇÒ¼öµµ ÀÖÀ»°ÍÀÌ´Ù. ±×·¯³ª vector Àº Ŭ·¡½º ÅÛÇø´ÀÇ Æ¯Â¡À» »ì·Á¼­ ¸Å¿ì ´Ù¾çÇÑ ÇÔ¼öµéÀ» Á¦°øÇϸç, ¿ì¸®´Â ÀÌ·¯ÇÑ ÇÔ¼öµéÀ» ÅëÇØ¼­ º°µµ·Î ÄÚµùÇÒÇÊ¿ä ¾øÀÌ ¿øÇÏ´Â ÀÛ¾÷À» ÇÒ¼ö ÀÖ°Ô µÈ´Ù.

ÀÌ·¯ÇÑ ÇÔ¼öµéÀº ±²ÀåÈ÷ ¸¹±â ¶§¹®¿¡ ºñ±³Àû »ç¿ëºóµµ°¡ ³ôÀº °Íµé¸¸À» ¼³¸íÇϵµ·Ï ÇϰڴÙ.


2.1.1.3.1절. À§Ä¡ °ü·Ã

vector ¿¡¼­ ¿ø¼Ò¿¡ Á¢±ÙÇϱâ À§ÇÑ °¡Àå °£´ÜÇÑ ¹æ¹ýÀº ¹è¿­°ú °°ÀÌ ¹è¿­Ã·ÀÚ¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù. ±×·¯³ª À̿ʹ ´Þ¸® Æ÷ÀÎÅÍ¿Í °°ÀÌ Á¢±ÙÀÌ °¡´ÉÇÏ´Ù. ÀÌ·¯ÇÑ Á¢±ÙÀ» À§Çؼ­ iterator ¶ó´Â °ÍÀ» Á¦°øÇÑ´Ù.

iterator ´Â Æ÷ÀÎÅÍ¿Í ¸Å¿ì ºñ½ÁÇÏ°Ô ¿ø¼ÒÀÇ À§Ä¡¸¦ °¡¸£Å°´Â ¿ªÈ°À» ÇÑ´Ù. iterator ´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ¾î¼­ »ç¿ëÇÒ¼ö ÀÖ´Ù.

#include <vector>
#include <string>
 
int main()
{
    vector<string> mydata;
 
    // iterator À» ¸¸µç´Ù. 
    // iterator ·Î ¼øÈ¯(ÂüÁ¶)ÇÒ ÄÁÅ×À̳ÊÀÇ Å¸ÀÔ¿¡ ¸Â°Ô ¸¸µé¾îÁØ´Ù. 
    vector<string>::iterator mi; 
 
    mydata.push_back("hello");
    mydata.push_back("world");
    mydata.push_back("ok");
 
    mi = mydata.begin();  // mydata  ÀÇ Ã¹¹øÂ° ¿ø¼ÒÀÇ À§Ä¡¸¦ °¡¸£Å²´Ù. 
    while ( mi != mydata.end())
    {
        cout << *mi <<endl;
        mi++;
    }
    cout << mydata[0] << endl;   // ¹è¿­°ú °°ÀÌ Ã·ÀÚ·Î Á¢±Ù °¡´ÉÇÏ´Ù. 
}
						
begin()Àº vector ÄÁÅ×À̳ÊÀÇ Ã³À½À§Ä¡¸¦ °¡¸£Å°´Â iterator ¸¦ ³Ñ°ÜÁÖ¸ç end()¸¦ ÅëÇØ¼­ ¸¶Áö¸·À§Ä¡¸¦ °¡¸£Å°´Â iterator ¸¦ °¡Á®¿Ã¼ö ÀÖ´Ù. À§ÀÇ ¿¹¸¦ º¸¸é iterator °¡ pointer ¿Í ¾ÆÁÖ À¯»çÇÔÀ» ¾Ë¼ö ÀÖ´Ù. Æ÷ÀÎÅÍ Ã³·³ ´ÙÀ½ À§Ä¡¸¦ °¡¸£Å³¼öµµ ÀÖÀ¸¸ç Áõ°¡¿¬»êµµ »ç¿ëÇÒ¼ö ÀÖ´Ù.
iterator begin();
iterator end();
						
À̵é begin() °ú end()´Â ´Ù¸¥ ¸ðµç ÄÁÅ×À̳ʿ¡µµ µ¿ÀÏÇÏ°Ô Àû¿ëµÈ´Ù.


2.1.1.3.2절. »ðÀÔ/»èÁ¦ °ü·Ã

vector Àº »ðÀÔ°ú °ü·ÃÇØ¼­ 2°³ÀÇ ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. insert ¿Í push_back Àε¥, À̵éÇÔ¼ö´Â ´Ù¸¥ sequence ÄÁÅ×À̳ʿ¡ °°ÀºÀ̸§À¸·Î Á¦°øµÇ°í ÀÖÀ¸¸ç, ÀÚÁÖ »ç¿ëµÇ´Â ÇÔ¼öµéÀÓÀ¸·Î ÀÍÇôµÎµµ·Ï ÇÏÀÚ. push_back ´Â ÄÁÅ×À̳ÊÀÇ ¸¶Áö¸·¿¡ ¿ø¼Ò¸¦ »ðÀÔÇÒ¶§ »ç¿ëÇϸç, insert ´Â ÀÓÀÇÀÇ Áö¿ª¿¡ ¿ø¼Ò¸¦ »ðÀÔÇϰíÀÚ ÇÒ¶§ »ç¿ëÇÑ´Ù.

¾Õ¿¡¼­ ¸»Çß´Ù ½ÃÇÇ, vector ÀÇ °æ¿ì Áß°£¿¡ ¿ø¼Ò¸¦ »ðÀ̽ÃŰ´Â°Ç »ó´çÈ÷ ºñÈ¿À²ÀûÀÌ´Ù. »èÁ¦ÇÒ¶§¿Í ¸¶Âù°¡Áö·Î Áß°£¿¡ insert ½Ãų°æ¿ì insert À§Ä¡ÀÇ µÚ¿¡ ÀÖ´Â ¸ðµç ¿ø¼ÒÀÇ À§Ä¡°¡ Àç Á¶Á¤µÇ±â ¶§¹®ÀÌ´Ù. Áï insert À§Ä¡ÀÇ µÚ¿¡ 100°³ÀÇ ¿ø¼Ò°¡ ´õ ÀÖ´Ù¸é, 100¹øÀÇ º¹»ç°¡ ´õ ÀϾ°Ô µÈ´Ù.

void push_back(const T&);
iterator insert(iterator pos, const T& x);
						
push_back() ´Â ±×³É T ŸÀÔÀÇ µ¥ÀÌŸ¸¦ ¹Ð¾î ³Ö±â¸¸ ÇÏ¸é ±×°É·Î ³¡ÀÌ´Ù. insert ´Â insert ÇÒ À§Ä¡¸¦ iterator ¸¦ ÅëÇØ¼­ ÁöÁ¤ÇØ ÁÖ¾î¾ß ÇÑ´Ù.
vector<string> mydata;
 
mydata.push_back("hello");
mydata.push_back("world");
mydata.push_back("ok");
 
// hello ´ÙÀ½¿¡ "yundream" À» »ðÀÔÇÑ´Ù.
mydata.insert(mydata.begin()+1, "yundream");  
 
// ȤÀº iterator À» ¼±¾ðÇØ¼­ »ðÀÔ°¡´ÉÇÏ´Ù.  
vector<string>::iterator mi;
mi = mydata.begin(); 
mydata.insert(mi + 2, "hahaha");
						
»èÁ¦°ü·Ã ÇÔ¼ö·Î´Â pop_back() °ú erase(), clear()°¡ ÀÖ´Ù. pop_back()´Â ¸¶Áö¸· ¿ø¼Ò¸¦ »èÁ¦ÇÒ¶§ »ç¿ëÇϸç, erase()´Â ÀÓÀÇÀÇ À§Ä¡¿¡ ÀÖ´Â ¿ø¼Ò¸¦ »èÁ¦ÇÒ¶§ »ç¿ëµÈ´Ù. erase() ´Â ¶ÇÇÑ ÁöÁ¤µÈ ¹üÀ§¿¡ ÀÖ´Â ¿ø¼ÒµéÀ» Áö¿ï¼öµµ ÀÖ´Ù. clear()´Â ¸ðµç ¿ø¼Ò¸¦ Áö¿ï¶§ »ç¿ëµÈ´Ù.
void pop_back();
iterator erase(iterator pos);
iterator erase(iterator first, iterator last);
						
clear()´Â erase(begin(), end()) ¿Í µ¿ÀÏÇÏ°Ô ¾²Àϼö ÀÖÀ»°ÍÀÌ´Ù.

swap()À» ÀÌ¿ëÇϸé ÇöÀç º¤ÅÍÀÇ ³»¿ëÀ» ´Ù¸¥ º¤ÅÍ·Î ´ë½Å ä¿ï¼ö ÀÖ´Ù.

void swap(vector&); 
						
vector<string> ok1, ok2;
...
...
ok1.swap(ok2); // ok1 ÀÇ ³»¿ëÀ» ok2·Î µ¤¾î¾´´Ù.  
						


2.1.1.3.3절. ¿ø¼ÒÀÇ Å©±â°ü·Ã

size()¸¦ ÅëÇØ¼­ ÇöÀç vector ÄÁÅ×À̳ʿ¡ ¸î°³ÀÇ ¿ø¼Ò°¡ µé¾îÀÖ´ÂÁö °è»êÇØ ³¾¼ö ÀÖ´Ù. empty()¸¦ ÀÌ¿ëÇϸé ÇöÀç ¿ø¼Ò°¡ ÀÖ´ÂÁö ¾ø´ÂÁö¸¦ ¾Ë¼ö ÀÖ´Ù. ½ÇÁ¦·Î size() ¸¦ ÅëÇØ¼­ ¿ø¼Ò°¡ ºñ¾îÀÖ´ÂÁö ¾Ë¼öµµ ÀÖÁö¸¸, empty()°¡ ´õ È¿À²ÀûÀ̹ǷΠ´ÜÁö ÄÁÅ×À̳ʰ¡ ºñ¾îÀÖ´ÂÁö¸¸ È®ÀÎÇϰíÀÚ ÇÑ´Ù¸é empty() ¸¦ »ç¿ëÇϵµ·Ï ÇÑ´Ù.

size_type size();
bool empty();
						
iterator ´ë½Å size()¸¦ ÀÌ¿ëÇØ¼­ vector ÄÁÅ×À̳ÊÀÇ ¸ðµç ¿ø¼Ò¸¦ °¡Á®¿Ã¼öµµ ÀÖ´Ù.
vecotr<string> mydata;
mydata.push_back("1");
mydata.push_back("2");
mydata.push_back("3");
mydata.push_back("4");
for(int i = 0; i < mydata.size(); i++)
{
    cout << mydata[i] << endl;	
}
						

vector ÀÇ °æ¿ì ¿ø¼ÒÀÇ °¹¼ö°¡ ´Ã¾î³ª¸é ÀÚµ¿ÀûÀ¸·Î ÄÁÅ×À̳ÊÀÇ Å©±â°¡ Á¶ÀýµÈ´Ù°í Çߴµ¥, ÇϳªÀÇ ¿ø¼Ò°¡ µé¾î¿Ã¶§ ¸¶´Ù ÄÁÅ×À̳ÊÀÇ Å©±â¸¦ Á¶ÀýµÇ´Â °Íº¸´Ù´Â, ¾î´ÀÁ¤µµ Å©±â¸¦ ¹Ì¸®ÇÒ´ç ÇØ³õ°í ¿ø¼Ò¸¦ ¹Þ¾ÆµéÀÌ´Â°Ô ÈξÀ´õ È¿À²ÀûÀÏ °ÍÀÌ´Ù.

ÀÌó·³ Ãʱ⿡ vector ÀÇ Å©±â¸¦ ¾î´ÀÁ¤µµ ÁöÁ¤ÇØÁ־ Å©±âÁ¶Àý(¸Þ¸ð¸®ÇÒ´ç)À» ÃÖ¼ÒÇѵµ·Î ÀϾ·Ï Á¶ÀýÇÒ¼ö ÀÖ´Ù. reserve() ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ÀÌ·¯ÇÑ ÀϵéÀ» ÇÒ¼ö ÀÖ´Ù. ÇѸ¶µð·Î ¸»Çؼ­ »ç¿ëÀÚ°¡ »ç¿ëµÉ ¸Þ¸ð¸®ÀÇ ¾çÀ» ¹Ì¸® °è»êÇØ¼­ ¸Þ¸ð¸®ÀÇ Å©±â¸¦ ÀçÇÒ´ç(reallocation)ÇÏ´Â °Å¶ó°í º¸¸é µÈ´Ù. ÇöÀç ÇÒ´çµÈ ¸Þ¸ð¸®ÀÇ ¾ç(¹Þ¾ÆµéÀϼö ÀÖ´Â ¿ø¼ÒÀÇ Å©±â)Àº capacity() ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ¾Ë¾Æ³¾¼ö ÀÖ´Ù. reserve()¿¡ ÀÇÇÑ ¸Þ¸ð¸® ÇÒ´çÀº ¼º´É¿¡ Áß¿äÇÑ ¿µÇâÀ» ¹ÌÄ¡¹Ç·Î vector »Ó¸¸ ¾Æ´Ï¶ó ´Ù¸¥ ÄÁÅ×À̳ʸ¦ ¾µ¶§´Â ¾î´ÀÁ¤µµÀÇ ¿ø¼Ò¸¦ ÀÌ¿ëÇÒ°ÍÀÎÁö¸¦ ¿¹ÃøÇؼ­ Àû´çÇÑ Å©±â¸¦ ÇÒ´çÇϵµ·Ï ÇÏÀÚ.

void reserve(size_type n);
size_type capacity() const;
						
¸¸¾à reserve() ·Î Å©±â¸¦ ÃæºÐÈ÷ ÀâÁö ¾Ê¾Æ¼­ ¿ø¼ÒÀÇ °¹¼ö°¡ ÃʰúÇßÀ»°æ¿ì¿¡´Â ÇöÀç capacity()*2 ¸¸Å­ÀÇ ¸Þ¸ð¸®°¡ ÇѲ¨¹ø¿¡ ÇÒ´çµÈ´Ù. óÀ½¿¡ reserve(20) À» Àâ¾Ò´Ù¸é ¿ø¼Ò°¡ 20À» ÃʰúÇßÀ»°æ¿ì¿¡´Â 20*2 ¸¸Å­ÀÌ ÇÒ´çµÉ°ÍÀÌ´Ù. À̰ÍÀÌ ÃʰúµÈ´Ù¸é ´ÙÀ½¹ø¿¡´Â 40*2 ¸¸Å­ÀÌ ÇÒ´çµÈ´Ù.


2.1.2절. deque

2.1.2.1절. Ư¡

À̸§¿¡¼­µµ ¾Ë¼ö ÀÖ°ÚÁö¸¸ queue ÀڷᱸÁ¶¸¦ À§ÇØ ÃÖÀûÈ­ µÇ¾ú´Ù. ±âº»ÀûÀÎ »ç¿ë¹æ¹ýÀº vector ¿Í ¸Å¿ì °°À¸¸ç, vector ¿Í´Â ´Þ¸® ÄÁÅ×À̳ÊÀÇ ¸Ç ¾Õ¿¡¼­ ÇàÇØÁö´Â »ðÀÔ/»èÁ¦¿¡ ´ëÇØ¼­ ¸Å¿ì ºü¸¥ ¿¬»ê(»ó¼ö½Ã°£)ÀÌ °¡´ÉÇÏ´Ù. º¸ÅëÀÇ queue ÀڷᱸÁ¶´Â ¸Ç¾Õ¿¡ ¿ø¼ÒÀÇ »ðÀÔÀ» ÇÏÁö ¾Ê´Â°Ô ¿øÄ¢ÀÌÁö¸¸ deque ´Â ¸Ç¾Õ¿¡ ¿ø¼ÒÀÇ »ðÀÔµµ Áö¿øÇÑ´Ù.

ÀÌ´Â ÀڷᱸÁ¶ÀÇ ¸ÇÀÇ ¿ä¼Ò¸¦ ºó¹øÇÏ°Ô Àаí/»èÁ¦ ÇØ¾ßÇÏ´Â queue ÀÇ Æ¯¼ºÀ» È¿À²ÀûÀ¸·Î Áö¿øÇÒ¼ö ÀÖ¾î¾ß Çϱ⠶§¹®ÀÌ´Ù.

À̿ܿ¡´Â vector ¿Í ¿ÏÀüÈ÷ »ç¿ë¹æ¹ýÀÌ ¶È°°´Ù°í º¸¸é µÈ´Ù. vector °ú ¸¶Âù°¡Áö·Î °¢ ¿ä¼Ò¿¡ ·£´ýÇÏ°Ô Á¢±Ù°¡´ÉÇÏ´Ù. vector ·Î ¸¸µé¾îÁø Äڵ带 dequeu ·Î º¯°æÇÏ°í ½ÍÀ¸¸é ¼±¾ð¿¡¼­ vector ¸¸ deque ·Î º¯°æ½ÃÄÑ ÁÖ¸é µÈ´Ù.

ÇÏÁö¸¸ Áß°£¿¡ ¿ä¼Ò¸¦ »ðÀÔ/»èÁ¦Çϴµ¥¿¡´Â vector ¿Í °°ÀÌ ¼±Çü½Ã°£ÀÌ ¼ÒºñµÈ´Ù. Áß°£¿¡ ¿ä¼Ò »ðÀÔ ,»èÁ¦ ÀÛ¾÷ÀÌ ¸¹ÀÌ ¿ä±¸µÈ´Ù¸é vector À̳ª deque ´ë½Å list ¸¦ ¾²´Â°Ô ´õ¿í È¿À²ÀûÀÌ´Ù. vector °ú ¸¶Âù°¡Áö·Î »ý¼ºµÇ¸é¼­ ÇÒ´ç±â°¡ ¸¸µé¾îÁ®¼­ ÀÚµ¿ÀûÀ¸·Î ¸Þ¸ð¸®¸¦ °ü¸®ÇÑ´Ù.


2.1.2.2절. ¼±¾ð

vector¿Í °°´Ù.

표 2. ÅÛÇø´ Parameters

Parameter¼³¸í±âº»°ª
TdequeÀÇ ¿ø¼Ò·Î µé¾î°¡°ÔµÉ °ªÀÇ Çü(type)ÀÌ´Ù. ÀÌ °ªÀº °´Ã¼°¡ µÉ¼öµµ ÀÖ´Ù. 
AllocdequeÀÇ ÇÒ´ç±â(allocator)ÀÌ´Ù. ÀÌ ÇÒ´ç±â¸¦ ÅëÇØ¼­ ÀÚµ¿À¸·Î ¸Þ¸ð¸® °ü¸®¸¦ ÇÑ´Ù.alloc
±âº»ÇÒ´ç±â¸¦ »ç¿ëÇÔÀ¸·Î ´ÙÀ½°ú °°ÀÌ deque ¸¦ ¸¸µé¾î¼­ »ç¿ëÇÒ¼ö ÀÖ´Ù.
deque<int> myint;
deque<class myobj> myobj;
deque<vector <myint> > v_myint; 
					


2.1.2.3절. ÀÚÁÖ »ç¿ëµÇ´Â ¸â¹ö ÇÔ¼öµé

¸ðµç »ç¿ë¹æ¹ý ½ÉÁö¾î´Â ÇÔ¼ö À̸§µé±îÁöµµ vector¿Í ¶È°°´Ù. À§ÀÇ vector ¸¦ ¼³¸íÇѰ÷¿¡¼­ vector À» deque·Î¸¸ º¯°æ½ÃŰ¸é µÈ´Ù.

vector ¿¡¼­´Â Á¦°øµÇÁö ¾Ê´Â ÇÔ¼ö·Î pop_front()¿Í, push_front()°¡ ÀÖ´Ù. pop_front()´Â ¸Ç¾ÕÀÇ ¿ø¼Ò¸¦ »èÁ¦ÇÒ¶§, push_front() ´Â ¸Ç¾Õ¿¡ ¿ø¼Ò¸¦ »ðÀÔÇÒ¶§ »ç¿ëÇÑ´Ù.

void push_front(const T&);
void pop_front();
					
±Ã±ÝÇÑ°Ô Çϳª ÀÖ´Ù. ¿Ö vector ¿¡¼­´Â push_front ³ª pop_front ¸¦ Áö¿øÇÏÁö ¾Ê´Â°ÍÀϱî. Áö¿øÇÏ·Á°í ¸¾¸¸ ¸ÔÀ¸¸é insert()³ª erase() µîÀ» ÀÌ¿ëÇØ¼­ ÃæºÐÈ÷ ±¸ÇöÇÒ¼ö ÀÖÀ»°Çµ¥.. ±× ÀÌÀ¯´Â vector¿¡¼­ ÀÌ·¯ÇÑ ¿¬»êÀº ´ë´ÜÈ÷ ºñÈ¿À²ÀûÀ̱⠶§¹®ÀÌ´Ù. ±×·¡¼­ óÀ½ºÎÅÍ ÇÁ·Î±×·¡¸Ó ÀÌ·¯ÇÑ ºñÈ¿À²ÀûÀÎ Á¢±ÙÀ» Â÷´ÜÇϱâ À§ÇÑ ¸ñÀûÀ¸·Î À̵é ÇÔ¼ö¸¦ ¸¸µé¾î ³õÁö ¾ÊÀº °ÍÀÌ´Ù.
deque<int> myque;
 
myque.push_back(1);
myque.push_back(2);
myque.push_back(3);
myque.push_back(4);
myque.push_back(5);
 
cout << myque.size() << ":" << myque[0] << endl;
myque.push_front(0);
cout << myque.size() << ":" << myque[0] << endl;
 
myque.pop_front();
cout << myque.size() << ":" << myque[0] << endl;
myque.pop_front();
cout << myque.size() << ":" << myque[0] << endl;
 
deque<int>::iterator mi;
mi = myque.begin();
 
while( mi != myque.end())
{
    cout << *mi << endl;
    *mi++;
}
					


2.1.3절. list

2.1.3.1절. Ư¡

STL ¿¡¼­ Á¦°øÇÏ´Â list ´Â double linked list ¸¦ ÀϹÝÈ­ ½ÃŲ ÅÛÇø´ ¹öÁ¯À̶ó°í »ý°¢ÇÏ¸é µÈ´Ù. double linked list ÀÇ Æ¯Â¡À» ¶ÇÇÑ ±×´ë·Î °¡Áö°í ÀÖ´Ù. vector ¿Í deque ´Â ÀÓÀÇ Á¢±ÙÀÌ °¡´ÉÇÏ´Ù°í Çß´Ù. ÀÌ´Â vector, deque °¡ ¹è¿­ÀÇ Æ¯Â¡À» °¡Áö±â ¶§¹®À¸·Î ÷ÀÚ¸¦ ÀÌ¿ëÇÑ ÀÓÀÇ Á¢±ÙÀÌ °¡´ÉÇÏ´Ù. ±×·¯³ª list ´Â ÀÌ·¯ÇÑ ÀÓÀÇ Á¢±ÙÀ» ÇÒ¼ö°¡ ¾ø´Ù(doublke linked list µµ ¸¶Âù°¡Áö). ´ë½Å¿¡ Áß°£¿¡¼­ÀÇ ¿ä¼Ò »ðÀÔ/»èÁ¦¸¦ ¸Å¿ì È¿À²ÀûÀ¸·Î ó¸®ÇÒ¼ö ÀÖ´Ù. vector, deque ¿Í °°Àº ¸Þ¸ð¸® ¿¬»êÀÌ ÀϾÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ´ÜÁö ´ÙÀ½¿ä¼Ò¸¦ °¡¸£Å³¼ö ÀÖµµ·Ï Æ÷ÀÎÅ͸¸ ÀçÁ¶Á¤ÇØ ÁÖ¸é µÇ±â ¶§¹®ÀÌ´Ù.

ÀÓÀÇ Á¢±ÙÀÌ ¾ÈµÇ¹Ç·Î ´ç¿¬È÷ ÷ÀÚ¸¦ ÀÌ¿ëÇØ¼­´Â ¿ä¼Ò¿¡ Á¢±ÙÇÒ¼ö ¾ø´Ù. ´ÜÁö ÀÌÅÍ·¹ÀÌÅ͸¦ ÀÌ¿ëÇØ¼­ Á¢±ÙÀÌ °¡´ÉÇÏ´Ù. double linked list ÀÇ ¿ä¼Ò¿¡ Á¢±ÙÇϱâ À§Çؼ­´Â Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇØ¾ß Çϴ°Ͱú ¸¶Âù°¡ÁöÀÌ´Ù.

ÀÓÀÇ Á¢±ÙÀÌ Æ÷±âµÇ´Â´ë½Å¿¡ linked list ÀÇ Æ¯Â¡À» ÀÌ¿ëÇÒ¼ö ÀÖ´Â ´Ù¾çÇÑ ´Ù¸¥ ±â´ÉµéÀÌ ÇÔ¼ö·Î Á¦°øµÇ¾î Áø´Ù.

±×·¯³ª list µµ ´ÜÁ¡ÀÌ Àִµ¥, Ư ƯÁ¤ ¿ø¼Ò¿¡ Á¢±ÙÇϱâ À§Çؼ­´Â óÀ½ºÎÅÍ ¿ø¼Ò¸¦ Âß Ã£¾Æ¼­ Á¢±ÙÇØ¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù. ÀÓÀÇ Á¢±ÙÀÌ ¾ÈµÈ´Ù. ±×·¯¹Ç·Î ¿ø¼ÒµéÀÌ ¼­·Î ¸Ö¸® ¶³¾îÁ® ÀÖ´Â »óȲ¿¡¼­ ¿¬»êÀ» ÇÏ°Ô µÇ¸é ºñÈ¿À²ÀûÀÌ µÉ¼ö°¡ ÀÖ´Ù.


2.1.3.2절. ¼±¾ð

´Ù¸¥ vector ¿Í deque ¿Í µ¿ÀÏÇÏ´Ù.

표 3. ÅÛÇø´ Parameters

Parameter¼³¸í±âº»°ª
TdequeÀÇ ¿ø¼Ò·Î µé¾î°¡°ÔµÉ °ªÀÇ Çü(type)ÀÌ´Ù. ÀÌ °ªÀº °´Ã¼°¡ µÉ¼öµµ ÀÖ´Ù. 
AllocdequeÀÇ ÇÒ´ç±â(allocator)ÀÌ´Ù. ÀÌ ÇÒ´ç±â¸¦ ÅëÇØ¼­ ÀÚµ¿À¸·Î ¸Þ¸ð¸® °ü¸®¸¦ ÇÑ´Ù.alloc


2.1.3.3절. ÀÚÁÖ »ç¿ëµÇ´Â ¸â¹ö ÇÔ¼öµé

list ÀÇ linked list ·Î½áÀÇ Æ¯Â¡¶§¹®¿¡ ¿ø¼ÒÀÇ »ðÀÔ/»èÁ¦¿¡ ´ëÇØ¼­ °¡Àå Æø³ÐÀº Áö¿øÀ» ÇØÁØ´Ù. push_back(), push_pop(), pop_front(), pop_back() µîÀÇ ¸ðµç ÇÔ¼öµéÀ» Áö¿øÇϸç, Áß°£¿¡ ¿ä¼Ò¸¦ ÀÔ·ÂÇϱâ À§ÇÑ erase(), insert() µµ Áö¿øÇÑ´Ù. ¹°·Ð erase ¿Í insert ´Â vector °ú deque ¿¡¼­µµ Áö¿øÇÏÁö¸¸ È¿À²¿¡¼­ ¸¹Àº Â÷À̰¡ ³­´Ù. list ´Â ÀÌ·¯ÇÑ ¸ðµç ¿¬»êÀ» »ó¼ö½Ã°£¿¡ ³¡³¾¼ö ÀÖ´Ù. ¸µÅ©¸¸ ´Ù½Ã ¸¸µé¸é µÇ±â ¶§¹®ÀÌ´Ù.

ÀÌ·¸°Ô ¸Þ¸ð¸® Àç¹èÄ¡¸¦ ÅëÇÏÁö ¾Ê°í ¸µÅ© Àç¹èÄ¡¸¸À» ÅëÇØ¼­ ¿ä¼ÒÀÇ »ðÀÔ/»èÁ¦°¡ °¡´ÉÇÏ´Ù´Â ÀåÁ¡¶§¹®¿¡ ´Ù¸¥ ÄÁÅ×À̳ʿ¡¼­´Â Á¦°øÇÏÁö ¾Ê´Â ¸î°¡Áö Ưº°ÇÑ ÇÔ¼öµéÀ» Á¦°øÇÑ´Ù.

void reverse();
void splice(iterator position, list<T, Alloc>& x);
					
reverse() ´Â ¿ø¼Ò¸¦ ¿ªÀ¸·Î Àç¹èÄ¡Çϰí, splice() ´Â iterator ·Î ÁÖ¾îÁø Æ÷Áö¼ÇºÎÅÍ x list ¸¦ °áÇÕ½ÃŲ´Ù. ÀÌ·¯ÇÑ ¸ðµç Àç¹èÄ¡ °úÁ¤Àº ´ÜÁö ¸µÅ©¸¸ ÀçÁ¶ÇÕÇÏ´Â °ÍÀ¸·Î »ó¼ö½Ã°£¿¡ ÀÌ·ç¾îÁø´Ù.
#include <list>
 
int main()
{
    list<int> mylist;
    list<int> mylist2;
 
    mylist.push_back(0);
    mylist.push_back(1);
 
    mylist2.push_back(2);
    mylist2.push_back(3);
 
    // mylist ¸¶Áö¸·¿¡ mylist2 ¸¦ ºÙÀδÙ. 
    mylist.splice(mylist.end(), mylist2);
 
    list<int>::iterator mi;
    mi = mylist.begin();
 
    while( mi != mylist.end())
    {
        cout << *mi << endl;
        *mi++;
    }
 
    // mylist ¸¦ ¿ªÀ¸·Î Àç¹èÄ¡ ÇÑ´Ù. 
    mylist.reverse();
    mi = mylist.begin();
 
    while( mi != mylist.end())
    {
        cout << *mi << endl;
        *mi++;
    }
}
					


3절. °á·Ð

ÀÌ»ó sequence ÄÁÅ×À̳ʿ¡ ´ëÇØ¼­ ¾Ë¾Æº¸¾Ò´Ù. º¸¸é ¾Ë°ÚÁö¸¸, ¾ó¸¶³ª À¯¿¬ÇÏ°Ô ÀڷᱸÁ¶¸¦ ±¸ÇöÇÒ¼ö Àִ°¡¸¦ ¾Ë¼ö ÀÖÀ»°ÍÀÌ´Ù. ¸µÅ©µå ¸®½ºÆ®ÀÌ°Ç Å¥ÀÌ°Ç ½ºÅÃÀÌ°Ç °£¿¡ °í¹Î¾øÀÌ ±¸Çö°¡´ÉÇÏ´Ù.

ÀÌ¿Í ÇÔ²² ³ªÁß¿¡ »ç¿ëµÉ Àú³Ê¸¯ ¾Ë°í¸®ÁòÀ» »ç¿ëÇϸé ÀڷᱸÁ¶¿¡ °¢Á¾ ¾Ë°í¸®Áò±îÁö Àû¿ë½ÃÄѼ­ »ç¿ëÇÒ¼ö ÀÖ´Ù.

ÄÁÅ×À̳ʸ¦ »ç¿ëÇÒ¶§ °¡ÀåÁß¿äÇѰÍÀº ÀÛ¾÷¿¡ °¡Àå È¿À²ÀûÀÎ ÄÁÅ×À̳ʸ¦ »ç¿ëÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. »ç½Ç vector ¸¸À¸·Îµµ list, deque ¸¦ ±¸Çö°¡´ÉÇÏ´Ù. ±×·³¿¡µµ list ¿Í deque °¡ Á¸ÀçÇÏ´Â °ÍÀº °¢°¢ÀÇ ÀڷᱸÁ¶¿¡ ´ëÇÑ ¿ä¼ÒÀÇ ¿¬»ê¿¡ Àû´çÇÑ ÄÁÅ×À̳ʰ¡ µû·Î Á¸ÀçÇϱ⠶§¹®ÀÌ´Ù.

¹è¿­À» ÀϹÝÈ­ ½ÃÄѼ­ °£´ÜÇÏ°Ô »ç¿ëÇÏ°í ½Í´Ù¸é vector À» queue ¿Í °°ÀÌ Ã³À½ °ú ¸¶Áö¸·¿¡ ¿ä¼Ò¸¦ Ãß°¡/»èÁ¦ ½ÃÄÑ¾ß ÇÑ´Ù¸é deque ¸¦ linked list ¿Í °°Àº º¹ÀâÇÑ ¿ä¼ÒÀÇ ¿¬»êÀ» ÇÊ¿ä·Î ÇÑ´Ù¸é list ¸¦ »ç¿ëÇÏ¸é µÈ´Ù.

¿©±â¿¡¼­ ´Ù·é ³»¿ëµéÀº Sequence ÄÁÅ×À̳ÊÀÇ ±â´ÉÁß ÀϺκÐÀÌ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº STL ȨÆäÀÌÁö ¸¦ Âü°íÇϵµ·Ï ÇÏÀÚ.

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