Ãâó: http://obori.new21.net

ÇÁ·Î±×·¡¹Ö Ä¿¹Â´ÏƼ www.codein.co.kr (CodeìÑ)

 

1. °³¿ä

 

ÄÁÅ×À̳Ê(container), ¾Ë°í¸®Áò(algorithm), ¹Ýº¹ÀÚ(iterator) ÀÌ 3°¡Áö°¡ STL¿¡¼­ °¡Àå Áß¿äÇÑ °ÍµéÀÌ´Ù.

ÄÁÅ×À̳Ê(container)¶õ °´Ã¼µéÀ» ´ã¾ÆµÑ ¼ö ÀÖ´Â °´Ã¼¸¦ ¸»ÇÑ´Ù.

¾Ë°í¸®Áò(algorithm)À» ÄÁÅ×À̳ʿ¡ Àû¿ëÇϱâ À§Çؼ­ ÇÊ¿äÇÑ °ÍÀÌ ¹Ýº¹ÀÚ(iterator)ÀÌ´Ù.

¹Ýº¹ÀÚ´Â ÄÁÅ×ÀÌ³Ê ³»ÀÇ Æ¯Á¤ À§Ä¡¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ¿Í ºñ½ÁÇÑ °³³äÀ̶ó°í º¸¸é µÇ¸ç,

ÀÌ ¹Ýº¹ÀÚ¸¦ ÅëÇØ ÄÁÅ×ÀÌ³Ê ³»ÀÇ ¿ø¼ÒµéÀ» ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î ´Ù·ç°Ô µÇ´Â °ÍÀÌ´Ù.

 

2. ¹Ýº¹ÀÚ(iterator)

 

1. °³¿ä

¹Ýº¹ÀÚ(iterator)¶õ, ÄÁÅ×À̳ʿ¡ ÀúÀåµÇ¾î ÀÖ´Â ¸ðµç ¿ø¼ÒµéÀ» ÀüüÀûÀ¸·Î ÈȾ°¥ ¶§ »ç¿ëÇÏ´Â,

ÀÏÁ¾ÀÇ Æ÷ÀÎÅÍ¿Í ºñ½ÁÇÑ °´Ã¼¶ó°í ÇÒ ¼ö ÀÖ´Ù.

¾Ë°í¸®Áò¸¶´Ù °¢±â ´Ù¸¥ ¹æ½ÄÀ¸·Î ÄÁÅ×À̳ʸ¦ ÈȾ±â ¶§¹®¿¡, ¹Ýº¹ÀÚ¿¡µµ ¿©·¯°¡Áö Á¾·ù°¡ ÀÖ´Ù.

 

past-the-end ¿ø¼Ò´Â, ¹üÀ§(range)ÀÇ ³¡À» ³ªÅ¸³»¸ç, ±¸°£ÀÇ ¸¶Áö¸· ¿ø¼Ò ´ÙÀ½¿¡ À§Ä¡ÇÑ ¿ø¼Ò¸¦ ÁöĪÇÑ´Ù.

 

2. ¹Ýº¹ÀÚÀÇ Á¾·ù

Ç¥ÁØ ¶óÀ̺귯¸®¿¡¼­ »ç¿ëµÇ´Â ¹Ýº¹ÀÚµéÀº ±âº»ÀûÀ¸·Î ´ÙÀ½ 5°¡Áö Çüŵé·Î ³ª´­ ¼ö ÀÖ´Ù.

ÀÔ·Â ¹Ýº¹ÀÚ(input iterator)

Àб⸸ °¡´É, ¼ø¹æÇâ À̵¿

Ãâ·Â ¹Ýº¹ÀÚ(output iterator)

¾²±â¸¸ °¡´É, ¼ø¹æÇâ À̵¿

¼ø¹æÇ⠹ݺ¹ÀÚ(forward iterator)

Àбâ/¾²±â ¸ðµÎ °¡´É, ¼ø¹æÇâ À̵¿

¾ç¹æÇ⠹ݺ¹ÀÚ(bidirectional iterator)

Àбâ/¾²±â ¸ðµÎ °¡´É, ¼ø¹æÇâ/¿ª¹æÇâ À̵¿

ÀÓÀÇ Á¢±Ù ¹Ýº¹ÀÚ(random access iterator)

Àбâ/¾²±â ¸ðµÎ °¡´É, ÀÓÀÇÁ¢±Ù

 

¹Ýº¹ÀÚ´Â °èÃþÀûÀ¸·Î ºÐ·ùµÈ´Ù.

¹Ýº¹ÀÚ Á¾·ù

»ý¼ºµÇ´Â ¹æ½Ä

ÀÔ·Â ¹Ýº¹ÀÚ(input iterator)

istream_iterator

Ãâ·Â ¹Ýº¹ÀÚ(output iterator)

ostream_iterator / inserter / front_inserter / back_inserter

¾ç¹æÇ⠹ݺ¹ÀÚ(bidirectional iterator)

list / set°ú multiset / map°ú multimap

ÀÓÀÇ Á¢±Ù ¹Ýº¹ÀÚ(random access iterator)

ÀÏ¹Ý Æ÷ÀÎÅÍ / vector / deque

 

2.1 ÀÔ·Â ¹Ýº¹ÀÚ(input iterator)

ex)        template <class InputIterator, class T>

            InputIterator find (InputIterator first, InputIterator last, const T& value)

            {

                        while (first != last && *first != value)

                                     ++first;

                        return first;

            }

 

ÀÔ·Â ¹Ýº¹ÀÚ¿¡´Â ´ÙÀ½ ¼¼°¡Áö Á¾·ù°¡ ÀÖ´Ù.

¨ç ÀÏ¹Ý Æ÷ÀÎÅÍ

¨è »ó¼ö Æ÷ÀÎÅÍ

¨é ÄÁÅ×ÀÌ³Ê ¹Ýº¹ÀÚ(container iterator).

Ç¥ÁØ ¶óÀ̺귯¸®°¡ Á¦°øÇÏ´Â ´Ù¾çÇÑ ÄÁÅ×À̳ʷκÎÅÍ »ý¼ºµÈ ¹Ýº¹ÀÚµéÀº, ¸ðµÎ ÀÔ·Â ¹Ýº¹ÀÚ°¡ °®Ãß¾î¾ß ÇÒ Á¶°ÇÀ» ¸¸Á·ÇÑ´Ù.

Ä÷º¼ÇÀÇ Ã¹¹ø° ¿ø¼Ò´Â begin()À̶ó´Â ¸â¹ö ÇÔ¼ö¸¦ ÅëÇؼ­ ¾òÀ» ¼ö ÀÖÀ¸¸ç,

past-the-end¸¦ °¡¸®Å°´Â ¹Ýº¹ÀÚ´Â end()¶ó´Â ¸â¹ö ÇÔ¼ö¸¦ ÅëÇؼ­ ¾òÀ» ¼ö ÀÖ´Ù.

 

¹Ýº¹ÀÚ¸¦ Áö¿øÇÏ´Â °¢°¢ÀÇ ÄÁÅ×À̳ʵéÀº Ŭ·¡½º ¼±¾ð¾È¿¡ ¹Ýº¹ÀÚ¶ó´Â À̸§À» °¡Áø ŸÀÔÀ» Á¦°øÇØ¾ß ÇÑ´Ù.

¸¸¾à¿¡ Á¢±ÙÇÏ°íÀÚ ÇÏ´Â ÄÁÅ×À̳ʰ¡ »ó¼öÀ̰ųª, const_iterator¸¦ »ç¿ëÇÏ¿© ¼±¾ðÇϸé, ±× ¹Ýº¹ÀÚ´Â »ó¼ö ¹Ýº¹ÀÚ°¡ µÈ´Ù.

 

ÀÔ·Â ½ºÆ®¸² ¹Ýº¹ÀÚ(input stream iterator).

Ç¥ÁØ ¶óÀ̺귯¸®´Â ÀÔ·Â ¹Ýº¹ÀÚ¸¦ »ç¿ëÇÏ¿© ÀÔ·Â ½ºÆ®¸²¿¡ ´ëÇØ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÑ´Ù.

ÀÌ´Â istream_iterator Ŭ·¡½º¸¦ ÅëÇØ Á¦°øµÈ´Ù.

 

2.2 Ãâ·Â ¹Ýº¹ÀÚ(output iterator)

Ãâ·Â ¹Ýº¹ÀÚ(output iterator)´Â ÀÔ·Â ¹Ýº¹ÀÚ¿Í´Â ¹Ý´ëµÇ´Â ±â´ÉÀ» °¡Áø´Ù.

Ãâ·Â ¹Ýº¹ÀÚ´Â ½ÃÄö½º¿¡ °ªÀ» ´ëÀÔÇϴµ¥ »ç¿ëµÉ ¼ö ÀÖÁö¸¸, °ªÀ» Á¢±ÙÇϴµ¥´Â »ç¿ëµÉ ¼ö ¾ø´Ù.

ex)        template <class InputIterator, class OutputIterator>

            OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result)

            {

                        while (first != last)

                                     *result++ = *first++;

                        return result;

            }

 

2.3 ¼ø¹æÇ⠹ݺ¹ÀÚ(forward iterator)

¼ø¹æÇ⠹ݺ¹ÀÚ(forward iterator)´Â ÀÔ·Â ¹Ýº¹ÀÚ¿Í Ãâ·Â ¹Ýº¹ÀÚÀÇ Æ¯Â¡À» °áÇÕÇÑ °ÍÀÌ´Ù.

°ªÀ» Á¢±ÙÇÏ°í °»½ÅÇÏ´Â °ÍÀÌ °¡´ÉÇÏ°Ô µÈ °ÍÀÌ´Ù.

ex)        template <class ForwardIterator, class T>

            void replace (ForwardIterator first, ForwardIterator last, const T& old_value, const T& new_value)

            {

                        while (first != last) {

                                     if (*first == old_value)

                                                 *first = new_value;

                                     ++first;

                        }

            }

 

2.4 ¾ç¹æÇ⠹ݺ¹ÀÚ(bidirectional iterator)

¾ç¹æÇ⠹ݺ¹ÀÚ(bidirectional iterator)´Â ¼ø¹æÇ⠹ݺ¹ÀÚ¿Í »ó´çÈ÷ ºñ½ÁÇÏ´Ù.

´Ù¸¸, ¾ç¹æÇ⠹ݺ¹ÀÚ´Â °¨¼Ò ¿¬»êÀÚ(--)¸¦ Áö¿øÇϹǷÎ, ÄÁÅ×À̳ʳ»ÀÇ ¿ø¼ÒµéÀ» ¼ø¹æÇâÀ̳ª ¿ª¹æÇâÀ¸·Î À̵¿ÇÏ´Â °ÍÀÌ Çã¿ëµÈ´Ù.

ex)        template <class BidirectionalIterator, class OutputIterator>

            OutputIterator reverse_copy (BidirectionalIterator first,

                        BidirectionalIterator last, OutputIterator result)

            {

                        while (first != last)

                                     *result++ = *--last;

                        return result;

            }

 

2.5 ÀÓÀÇÁ¢±Ù ¹Ýº¹ÀÚ(random access iterator)

ÀÓÀÇÁ¢±Ù ¹Ýº¹ÀÚ(random access iterator)µéÀº ÷ÀÚ¿¡ ÀÇÇÑ Á¢±ÙÀÌ °¡´ÉÇÏ°í,

´Ù¸¥ ¹Ýº¹ÀÚ¿ÍÀÇ Â÷¸¦ ±¸ÇÒ ¼ö ÀÖ°í, »ê¼ú¿¬»êÀ» ÅëÇØ °ªÀ» ¼öÁ¤ÇÒ ¼ö ÀÖ´Â µî

±âÁ¸ÀÇ ÀÏ¹Ý Æ÷ÀÎÅÍ°¡ Çß´ø ¸ðµç °ÍÀ» ÇÒ ¼ö ÀÖ´Ù.

 

ÀÓÀÇÁ¢±Ù ¹Ýº¹ÀÚ¸¦ »ç¿ëÇÏ´Â ¾Ë°í¸®Áò¿¡´Â Á¤·Ä°ú ÀÌÁø°Ë»ö°ú °°Àº ¿¬»êµîÀ» Æ÷ÇÔÇÑ´Ù.

ex)        template <class RandomAccessIterator>

            void mixup(RandomAccessIterator first, RandomAccessIterator last)

            {

                        while (first < last) {

                                     iter_swap(first, first + randomInteger(last - first));

                                     ++first;

                        }

            }

 

2.6 ¿ª ¹Ýº¹ÀÚ(reverse iterator)

¿ª ¹Ýº¹ÀÚ(reverse iterator)´Â Ç¥ÁØ ¹Ýº¹ÀÚ°¡ ºÎ¿©¹ÞÀº ¼ø¼­¿Í´Â ¹Ý´ëµÇ´Â ¼ø¼­·Î °ªµéÀ» Á¢±ÙÇÑ´Ù.

Áï, vector³ª list¿¡¼­ ¿ª ¹Ýº¹ÀÚ´Â ¸¶Áö¸· ¿ø¼Ò¸¦ ¸Ç ¸ÕÀú Á¢±ÙÇÏ°í, ù¹ø° ¿ø¼Ò¸¦ ¸Ç ¸¶Áö¸·¿¡ Á¢±ÙÇÑ´Ù.

set¿¡¼­´Â °¡Àå Å« ¿ø¼Ò°¡ ¸Ç ¸ÕÀú ¾ò¾îÁö°í, °¡Àå ÀÛÀº ¿ø¼Ò°¡ ¸¶Áö¸·¿¡ Á¢±ÙµÈ´Ù.

¾ö°ÝÈ÷ ¸»Çؼ­, ¿ª¹Ýº¹ÀÚ´Â »õ·Î¿î Á¾·ùÀÇ ¹Ýº¹ÀÚ°¡ ¾Æ´Ï´Ù.

 

list, set, map ŸÀÔÀº ¿ª ¾ç¹æÇ⠹ݺ¹ÀÚ¸¦ »ý¼ºÇÏ´Â ¸â¹ö ÇÔ¼ö¸¦ ÇÑ½Ö °¡Áö°í Á¦°øÇÏ°í ÀÖ´Ù.

rbegin()°ú rend() ÇÔ¼ö´Â ÇØ´ç ÄÁÅ×À̳ʸ¦ ¿ª¼øÀ¸·Î ÈÈ´Â ¹Ýº¹ÀÚ¸¦ »ý¼ºÇÑ´Ù.

¿ª ¹Ýº¹ÀÚ¿¡ ´ëÇÑ Áõ°¡¿¬»êÀº ÈÄÅ𸦠ÀǹÌÇÏ°í, °¨¼Ò¿¬»êÀº ÀüÁøÀ» ÀǹÌÇÑ´Ù.

 

À¯»çÇÏ°Ô, vector¿Í deque ŸÀÔ¿¡¼­´Â ¿ª ÀÓÀÇÁ¢±Ù ¹Ýº¹ÀÚ¸¦ »ý¼ºÇÏ´Â ¸â¹öÇÔ¼ö(rbegin()°ú rend())¸¦ °¡Áö°í ÀÖ´Ù.

»Ó¸¸¾Æ´Ï¶ó, ÷ÀÚ¿Í µ¡¼À ¿¬»ê ¿ª½Ã ÈÄÅ𸦠ÀǹÌÇÑ´Ù.

 

3. ½ºÆ®¸² ¹Ýº¹ÀÚ(stream iterator)

½ºÆ®¸² ¹Ýº¹ÀÚ´Â ¹Ýº¹ÀÚ ¿¬»êÀ» ÀÌ¿ëÇÏ¿© ÀÔ·Â ¶Ç´Â Ãâ·Â ½ºÆ®¸²À» Á¢±ÙÇϴµ¥

»ç¿ëµÈ´Ù.

 

3.1 ÀÔ·Â ½ºÆ®¸² ¹Ýº¹ÀÚ(input stream iterator)

Ç¥ÁØ ¶óÀ̺귯¸®´Â ÀÔ·Â ½ºÆ®¸²À» ÀÔ·Â ¹Ýº¹ÀÚ·Î º¯È¯ÇÏ´Â ¹æ½ÄÀ» istream_iterator¿¡ ÀÇÇØ Á¦°øÇÑ´Ù.

¼±¾ðÇÒ ¶§, 4°³ÀÇ ÅÛÇø´ ÀÎÀÚ°¡ ÇÊ¿äÇѵ¥,

¿ø¼ÒÀÇ Å¸ÀÔ, ½ºÆ®¸² ¹®ÀÚÀÇ Å¸ÀÔ, ¹®ÀÚ trait ŸÀÔ, ±×¸®°í ¿ø¼Ò°£ÀÇ °Å¸®¸¦ ÃøÁ¤Çϴ ŸÀÔÀÌ ÇÊ¿äÇÏ´Ù.

¸¶Áö¸· 2°³´Â µðÆúÆ®·Î char_traits¿Í ptrdiff_t¸¦ °¡Áø´Ù.

istream_iteratorÀÇ »ý¼ºÀÚ·Î µé¾î°¡´Â ÀÎÀÚ´Â ´Ü ÇϳªÀε¥, ÀÌ´Â Á¢±ÙÇÒ ½ºÆ®¸²À» ³ªÅ¸³½´Ù.

 

ÀÔ·Â ½ºÆ®¸² ¹Ýº¹ÀÚ¿¡ ´ëÇØ Áõ°¡ ¿¬»êÀÚ(++)°¡ Àû¿ëµÉ ¶§¸¶´Ù

½ºÆ®¸²À¸·ÎºÎÅÍ »õ·Î¿î °ªÀ» Àоî(>> ¿¬»êÀÚ »ç¿ë) ÀúÀåÇÑ´Ù. ÀÌ °ªÀº ÂüÁ¶ ¿¬»êÀÚ(*)¸¦ »ç¿ëÇÏ¿© ¾òÀ» ¼ö ÀÖ´Ù.

 

ex)        istream_iterator<int, char> intstream(cin), eof;

            istream_iterator<int, char>::iterator where =

                        find(intstream, eof, 7);

 

3.2 Ãâ·Â ½ºÆ®¸² ¹Ýº¹ÀÚ(output stream iterator)

Ãâ·Â ½ºÆ®¸² ¹Ýº¹ÀÚ(output stream iterator)´Â,

°ªµéÀÌ ¹Ýº¹ÀÚ·Î ´ëÀ﵃ ¶§¸¶´Ù >> ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© ÇØ´ç Ãâ·Â ½ºÆ®¸²À¸·Î Ãâ·ÂÇÑ´Ù.

Ãâ·Â ½ºÆ®¸² ¹Ýº¹ÀÚ¸¦ »ý¼ºÇϱâ À§Çؼ­´Â »ý¼ºÀÚÀÇ ÀÎÀÚ·Î Ãâ·Â ½ºÆ®¸²À» ÁöÁ¤ÇØ¾ß ÇÑ´Ù.

»ý¼ºÀÚÀÇ »ý·« °¡´ÉÇÑ µÎ¹ø° ÀÎÀÚ´Â Ãâ·ÂµÇ´Â °ªµé »çÀÌÀÇ ºÐ¸®ÀÚ·Î »ç¿ëµÉ ¹®ÀÚ¿­À» ³ªÅ¸³½´Ù.

 

ex)        copy(newdata.begin(), newdata.end(), ostream_iterator<int, char>(cout, " "));

 

4. »ðÀÔ ¹Ýº¹ÀÚ(insert iterator)

»ðÀÔ ¹Ýº¹ÀÚ¿¡´Â 3°¡Áö ÇüÅ°¡ Àִµ¥, ÀÌµé ¸ðµÎ º¹»ç ¿¬»êÀ» »ðÀÔ ¿¬»êÀ¸·Î ¹Ù²Ù´Âµ¥ »ç¿ëµÈ´Ù.

°¡Àå ÀϹÝÀûÀÎ ÇüÅ·Πinserter()°¡ ÀÖ´Ù.

inserter´Â µÎ°³ÀÇ ÀÎÀÚ¸¦ ÃëÇϴµ¥, ÄÁÅ×ÀÌ³Ê¿Í ÄÁÅ×À̳ʳ»ÀÇ ¹Ýº¹ÀÚ°¡ ±×°ÍÀ¸·Î, ¿ø¼ÒµéÀ» ÄÁÅ×À̳ÊÀÇ Æ¯Á¤ À§Ä¡·Î º¹»çÇÑ´Ù.

front_inserter() »ç¿ëÇÏ¿© ¾ò¾îÁø ¹Ýº¹ÀÚ´Â ÇØ´ç ÄÁÅ×À̳ÊÀÇ ¾ÕÂÊ¿¡ °ªµéÀ» »ðÀÔÇÑ´Ù.

back_inserter()¸¦ ÅëÇØ ¾òÀº ¹Ýº¹ÀÚ´Â ÇØ´ç ÄÁÅ×À̳ÊÀÇ µÚÂÊ¿¡ °ªµéÀ» »ðÀÔÇÑ´Ù.

µÎ°¡Áö ÇüÅ ¸ðµÎ list¿Í deque¿Í ÇÔ²² »ç¿ëµÉ ¼ö ÀÖÀ¸³ª, set°ú vector¿¡´Â »ç¿ëµÉ ¼ö ¾ø´Ù.

 

void main()

{

            int threeToOne[] = {3, 2, 1};

            int fourToSix[] = {4, 5, 6};

            int sevenToNine[] = {7, 8, 9};

 

            list<int> aList;

 

            copy(threeToOne, threeToOne+3, front_inserter(aList));          // first insert into the front

 

            copy(sevenToNine, sevenToNine+3, back_inserter(aList));        // then insert into the back

 

            // find the seven, and insert into middle

            list<int>::iterator seven = find(aList.begin(), aList.end(), 7);

            copy(fourToSix, fourToSix+3, inserter(aList, seven));

 

            // copy result to output

            copy(aList.begin(), aList.end(), ostream_iterator<int,char>(cout, " "));

            cout << endl;

}

 

5. ¹Ýº¹ÀÚ ¿¬»ê(iterator operation)

Ç¥ÁØ ¶óÀ̺귯¸®´Â ¹Ýº¹ÀÚ¸¦ ´Ù·ç´Âµ¥ »ç¿ëµÇ´Â µÎ°³ÀÇ ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù.

advance() ÇÔ¼ö´Â ÇϳªÀÇ ¹Ýº¹ÀÚ¿Í ÇϳªÀÇ ¼ýÀÚ°ªÀ» ÀÎÀÚ·Î ¹Þ¾Æ¼­, ¹Ýº¹ÀÚ¸¦ ÁÖ¾îÁø °ª¸¸Å­ À̵¿½ÃŲ´Ù.

 

            void advance(InputIterator& iter, Distance& n);

 

µÎ¹ø° ÇÔ¼öÀÎ distance()´Â µÎ ¹Ýº¹ÀÚ°£ÀÇ °Å¸®¸¦ ¹ÝȯÇÑ´Ù.

 

            void distance(InputIterator first, InputIterator last, Distance& n);

 

3. ÇÔ¼ö(function)¿Í Á¶°ÇÀÚ(predicate)

 

1. ÇÔ¼ö(function)

Ç¥ÁØ ¶óÀ̺귯¸®¿¡¼­ Á¦°øÇÏ´Â ¾Ë°í¸®Áò Áß¿¡´Â ÇÔ¼ö¸¦ ÀÎÀÚ·Î ¿ä±¸ÇÏ´Â °ÍµéÀÌ ¸¹´Ù.

¿¹¸¦ µé¾î, for_each(), transform() ¾Ë°í¸®ÁòÀº ÄÁÅ×À̳ʿ¡ ´ã±ä °¢°¢ÀÇ ¿ø¼Ò¿¡ ÀÎÀÚ·Î ³Ñ°Ü¹ÞÀº ÇÔ¼ö¸¦ Àû¿ëÇÑ´Ù.

 

2. Á¶°ÇÀÚ(predicate)

Á¶°ÇÀÚ(predicate)´Â ºÒ°ª(true/false) ¶Ç´Â Á¤¼ö°ªÀ» ¸®ÅÏÇÏ´Â ÇÔ¼öÀÌ´Ù.

 

            bool isLeapYear(unsigned int year)   // 'year'°¡ À±³âÀ̸é ÂüÀ» ¸®ÅÏÇÑ´Ù.

            {

            int flag = false;

 

            if ((year % 4) == 0) {       // 4³â¸¶´Ù À±³âÀÌ°í,

                        flag = true;

                        if((year % 100) == 0) {     // ±×Áß 100³â¸¶´Ù À±³âÀÌ ¾Æ´Ï°í,

                                     flag = false;

                                     if((year % 400) == 0) {     // ±×Áß 400³â¸¶´Ù À±³â

                                                 flag = true;

                                     }

                        }

            }

            return flag;

            }

 

3. ÇÔ¼ö °´Ã¼(function object)

ÇÔ¼ö °´Ã¼(function object)´Â °ýÈ£ ¿¬»êÀÚ¸¦ ¸â¹öÇÔ¼ö·Î °¡Áö°í Àִ Ŭ·¡½ºÀÇ °´Ã¼ÀÌ´Ù.

ÀÏ¹Ý ÇÔ¼ö ´ë½Å¿¡ ÇÔ¼ö °´Ã¼¸¦ »ç¿ëÇÏ´Â ÀÌÀ¯´Â ´ÙÀ½°ú °°´Ù.

ù°, »õ·Î¿î ÇÔ¼ö¸¦ ¸¸µéÁö ¾Ê°í Ç¥ÁØ ¶óÀ̺귯¸®¿¡¼­ Á¦°øµÇ´Â ÇÔ¼ö°´Ã¼¸¦ »ç¿ëÇÏ°í,

µÑ°, ÀζóÀÎ ÇÔ¼ö¸¦ È£ÃâÇÔÀ¸·Î½á ¼öÇà¼Óµµ¸¦ Çâ»ó½ÃÅ°°íÀÚ Çϸç,

¸¶Áö¸·À¸·Î, ÇÔ¼ö°´Ã¼·Î ÇÏ¿©±Ý ÀÚ½ÅÀÌ °¡Áö°í ÀÖ´Â »óÅÂÁ¤º¸¸¦ Á¢±ÙÇÏ°í, °»½ÅÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.

Ç¥ÁØ ¶óÀ̺귯¸®¿¡¼­ Á¦°øµÇ´Â ÇÔ¼ö°´Ã¼´Â ´ÙÀ½°ú °°´Ù.

»ê¼ú ÇÔ¼ö(arithmetic function)

            plus(), minus(), multiplies(), divides(), modulus(), negate()        // +, -, *, /, %, ~

ºñ±³ ÇÔ¼ö(comparison function)

            equal_to(), not_equal_to(), greater(), less(), greater_equal(), less_equal()          // ==, !=, >, <, >=, <=

³í¸® ÇÔ¼ö(logical function)

            logical_and(), logical_or(), logical_not()         // &&, ||, !

 

4. ÇÔ¼ö ¾î´ðÅÍ(function adaptor)

ÇÔ¼ö ¾î´ðÅÍ(function adaptor)´Â

ÇÔ¼ö¸¦ ÇÔ¼ö°´Ã¼·Î »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Àü¿ªÇÔ¼ö ¶Ç´Â ¸â¹öÇÔ¼ö¸¦ ¹Ù²ãÁִ Ŭ·¡½ºÀÇ °´Ã¼ÀÌ´Ù.

°¢°¢ÀÇ ÇÔ¼ö ¾î´ðÅÍ´Â Àü¿ª ÇÔ¼ö ¶Ç´Â ¸â¹ö ÇÔ¼ö¸¦ ÀÎÀÚ·Î ÇÏ´Â »ý¼ºÀÚ¸¦ °¡Áö°í ÀÖ´Ù.

 

5. ºÎÁ¤ÀÚ(negator)¿Í ¹ÙÀδõ(binder)

ºÎÁ¤ÀÚ(negator)¿Í ¹ÙÀδõ(binder)´Â

±âÁ¸¿¡ ÀÖ´ø ÇÔ¼ö °´Ã¼·ÎºÎÅÍ »õ·Î¿î ÇÔ¼ö °´Ã¼¸¦ ¸¸µå´Âµ¥ »ç¿ëµÇ´Â ÇÔ¼ö ¾î´ðÅÍÀÌ´Ù.

À̵éÀº ´Ù¸¥ ÇÔ¼ö³ª generic ¾Ë°í¸®ÁòÀ» È£ÃâÇϱ⿡ ¾Õ¼­

ÀÎÀÚ ¸®½ºÆ®¸¦ ±¸¼ºÇÏ´Â °úÁ¤ÀÇ ÀϺηΠ»ç¿ëµÇ´Â °ÍÀÌ º¸ÅëÀÌ´Ù.

 

ºÎÁ¤ÀÚ not1()¿Í not2()´Â °¢°¢ ´ÜÇ×°ú ÀÌÇ× Á¶°ÇÀÚ °´Ã¼¸¦ ÀÎÀÚ·Î ¹Þ¾Æµé¿©,

¿ø·¡ °ªÀÇ ¹Ý´ë°ªÀ» ³»¹ñ´Â »õ·Î¿î ÇÔ¼ö °´Ã¼¸¦ »ý¼ºÇÑ´Ù.

 

¹ÙÀδõ´Â µÎ°³ÀÇ ÀÎÀÚ¸¦ °¡Áö´Â ÇÔ¼ö¸¦ ¹Þ¾Æ¼­,

ù¹ø° ÀÎÀÚ³ª µÎ¹ø° ÀÎÀÚ¸¦ ƯÁ¤ °ªÀ¸·Î ¹ÙÀεå½ÃÄÑ ÇÑ°³ÀÇ ÀÎÀÚ¸¦ °¡Áö´Â ÇÔ¼ö¸¦ ¸¸µé¾î ³½´Ù.

ÀÌ ¶§, ¹ÙÀδõÀÇ ÀÎÀÚ·Î ³Ñ¾î¿À´Â ÇÔ¼ö´Â binary_function Ŭ·¡½ºÀÇ ÇÏÀ§ Ŭ·¡½º¿¡ ¼ÓÇØ¾ß ÇÑ´Ù.

 

4. ÄÁÅ×À̳Ê(container) Ŭ·¡½º

 

1. °³¿ä

Ç¥ÁØ ¶óÀ̺귯¸®´Â ¾à 10°¡Áö Á¾·ùÀÇ ÄÁÅ×À̳ʸ¦ Á¦°øÇÑ´Ù.

À̸§

Ư¡

vector

ÀÓÀÇÁ¢±ÙÀÌ °¡´ÉÇϸç, µÚ¿¡¼­ÀÇ »ðÀÔÀÌ ºü¸§

list

À§Ä¡¿¡ »ó°ü¾øÀÌ »ðÀÔ°ú »èÁ¦°¡ ºü¸§

deque

ÀÓÀÇÁ¢±ÙÀÌ °¡´ÉÇϸç, ¾Õ°ú µÚ¿¡¼­ÀÇ »ðÀÔÀÌ ºü¸§

set

¿ø¼ÒµéÀ» ¼ø¼­´ë·Î °ü¸®Çϸç, ¼Ò¼Ó°Ë»ç¿Í »ðÀÔ,»èÁ¦°¡ ºü¸§

multiset

Áߺ¹À» Çã¿ëÇÏ´Â set

map

Å°¸¦ ÅëÇØ °ªÀ» Á¢±ÙÇϸç, »ðÀÔ°ú »èÁ¦°¡ ºü¸§

multimap

Áߺ¹Å°¸¦ Çã¿ëÇÏ´Â map

stack

top ¿¡¼­¸¸ »ðÀÔ°ú »èÁ¦°¡ °¡´É

queue

»ðÀÔÀº µÚÂÊ¿¡¼­, »èÁ¦´Â ¾ÕÂÊ¿¡¼­

priority_queue

°¡Àå Å«°ªÀÇ Á¢±Ù°ú »èÁ¦°¡ ºü¸§

 

 

2. ÄÁÅ×ÀÌ³Ê ¼±ÅÃÇϱâ

1) ÄÝ·º¼Ç³»ÀÇ °ªµéÀ» ¾î¶² ¹æ½ÄÀ¸·Î Á¢±ÙÇϴ°¡?

ÀÓÀÇÁ¢±ÙÀÌ ÇÊ¿äÇÏ´Ù¸é, vector¿Í deque¸¦ »ç¿ëÇ϶ó

 

2) ÄÝ·º¼Ç³»ÀÇ °ªµé¿¡ ¼ø¼­¸¦ ¸Å±æ °ÍÀΰ¡?

ÄÁÅ×À̳ʰ¡ À¯ÁöµÇ´Â µ¿¾È °è¼Ó ¼ø¼­°¡ À¯ÁöµÇ¾î¾ß ÇÑ´Ù¸é, setÀ» ¼±ÅÃÇØ¾ß ÇÑ´Ù.

set¿¡ »ðÀÔÀ» Çϸé ÀÚµ¿ÀûÀ¸·Î ¼ø¼­¿¡ ¸Â°Ô ³õ¿©Áø´Ù.

¹Ý¸é¿¡, ¼ø¼­°¡ ¾î´À ÇѽÃÁ¡¿¡¼­¸¸ Áß¿ä½ÃµÈ´Ù¸é, list³ª vector¿¡ °ªµéÀ» »ðÀÔÇÏ°í,

ÀûÀýÇÑ ¶§¿¡ ÇØ´ç ÄÁÅ×À̳ʸ¦ Á¤·ÄÀ» ÇÏ´Â °ÍÀÌ ´õ ¼ö¿ùÇÏ´Ù.

¸¸¾à¿¡ µ¥ÀÌÅͱ¸Á¶ ³»¿¡¼­ À¯ÁöµÇ´Â °ªµéÀÇ ¼ø¼­°¡ »ðÀÔÇÏ´Â ¼ø¼­¿¡ °ü°è°¡ ÀÖ´Ù¸é,

stackÀ̳ª queue¶Ç´Â list°¡ ÃÖ»óÀÇ ¼±ÅÃÀÌ µÉ °ÍÀÌ´Ù.

 

3) ½ÇÇàÁß¿¡ µ¥ÀÌÅÍ ±¸Á¶ÀÇ Å©±â°¡ ±¤¹üÀ§ÇÏ°Ô º¯Çϴ°¡?

±×·¸´Ù¸é, list³ª set¸¦ ¼±ÅÃÇÏ´Â °ÍÀÌ °¡Àå ÁÁ´Ù.

vector³ª dequeÀº ÄÝ·º¼ÇÀ¸·ÎºÎÅÍ ¿ø¼ÒµéÀ» Á¦°ÅÇÑ µÚ¿¡µµ Ä¿´Ù¶õ ¹öÆÛ¸¦ °è¼Ó À¯ÁöÇÏ°í ÀÖ´Ù.

¸¸¾à¿¡, ÄÝ·º¼ÇÀÇ Å©±â°¡ »ó´ëÀûÀ¸·Î °íÁ¤µÇ¾î ÀÖ´Ù¸é, vector³ª deque°¡

°°Àº ¼öÀÇ ¿ø¼Ò¸¦ Áö´Ï°í ÀÖ´Â list³ª setº¸´Ù´Â ÀûÀº ¸Þ¸ð¸®¸¦ »ç¿ëÇÑ´Ù.

 

4) ÄÝ·º¼ÇÀÇ Å©±â¸¦ ÃßÁ¤ÇÒ ¼ö Àִ°¡?

vector´Â ¿øÇÏ´Â Å©±âÀÇ ¸Þ¸ð¸® ºí·°À» ¹Ì¸® ÇÒ´ç¹ÞÀ» ¼ö ÀÖ´Ù(reserve() ¸â¹öÇÔ¼ö¸¦ »ç¿ë).

ÀÌ´Â ´Ù¸¥ ÄÁÅ×À̳ʿ¡¼­´Â Á¦°øµÇÁö ¾ÊÀº ±â´ÉÀÌ´Ù.

 

5) ¾î¶² °ªÀÌ ÄÝ·º¼Ç³»¿¡ Æ÷ÇԵǾî ÀÖ´ÂÁö¸¦ ÀÚÁÖ È®ÀÎÇϴ°¡?

¸¸¾à¿¡ ±×·¸´Ù¸é, setÀ̳ª mapÀ» ¼±ÅÃÇÏ´Â °ÍÀÌ ÁÁ°Ú´Ù.

setÀ̳ª map¿¡¼­´Â ¾î¶² °ªÀÌ ÄÁÅ×À̳ʿ¡ ¼ÓÇØ ÀÖ´ÂÁö¸¦ °Ë»çÇÏ´Â °ÍÀÌ ¸Å¿ì ºü¸£Áö¸¸,

´Ù¸¥ Á¾·ùÀÇ ÄÝ·º¼Ç¿¡¼­´Â À̸¦ °Ë»çÇϱâ À§Çؼ­ ÄÁÅ×À̳ʿ¡ ÀúÀåµÈ ¸ðµç ¿ø¼ÒµéÀ» ÀÏÀÏÀÌ ºñ±³ÇØ¾ß ÇÑ´Ù.

 

6) ÄÝ·º¼Ç¿¡ ´ëÇØ À妽ÌÀÌ °¡´ÉÇÑ°¡? ´Ù½Ã¸»ÇØ, ÄÝ·º¼ÇÀ» Å°¿Í °ªÀÇ ½ÖÀ¸·Î »ý°¢ÇÒ

¼ö Àִ°¡?

Å°µéÀÌ 0°ú ¾î¶² »óÇѼ± »çÀÌÀÇ Á¤¼ö°ªÀ̶ó¸é, vector¿Í deque¸¦ ¼±ÅÃÇØ¾ß ÇÑ´Ù.

¹Ý¸é¿¡, Å°°ªµéÀÌ ¾î¶² ¼ø¼­°¡ ÀÖ´Â µ¥ÀÌÅÍÇüÀ̶ó¸é(¹®ÀÚ³ª ¹®ÀÚ¿­ ¶Ç´Â »ç¿ëÀÚ Á¤ÀÇ Å¸ÀÔ°ú °°Àº) mapÀ» »ç¿ëÇÑ´Ù.

 

7) °ªµé°£¿¡ ¼­·Î ¿¬°ü¼ºÀÌ Àִ°¡?

Ç¥ÁØ ¶óÀ̺귯¸®°¡ Á¦°øÇÏ´Â ÄÁÅ×À̳ʿ¡ ¼ÓÇÑ ¸ðµç °ªµéÀÌ ´Ù¸¥ °ª°ú °°ÀºÁö¸¦ ºñ±³ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù.

ÇÏÁö¸¸, ¸ðµç ÄÁÅ×À̳ʰ¡ less-than ¿¬»êÀÚ¸¦ Á¦°øÇÒ ÇÊ¿ä´Â ¾ø´Ù.

±×·¯³ª, less-than ¿¬»êÀÚ¸¦ »ç¿ëÇؼ­´Â ¼ø¼­°¡ À¯ÁöµÉ ¼ö ¾ø´Â °ªµéÀº setÀ̳ª map¿¡ ÀúÀåÇÏ¸é ¾ÈµÈ´Ù.

 

8) ÄÝ·º¼ÇÀ¸·ÎºÎÅÍ °¡Àå Å« °ªÀ» ã¾Æ¼­ Á¦°ÅÇÏ´Â ¿¬»êÀÌ ÀÚÁÖ ÀϾ´Â°¡?

±×·¸´Ù¸é, priority_queue°¡ ÃÖ¼±ÀÇ ÄÁÅ×À̳ÊÀÌ´Ù.

 

9) µ¥ÀÌÅÍ ±¸Á¶ÀÇ ¾î´À À§Ä¡·Î °ªµéÀÌ »ðÀԵǰí Á¦°ÅµÇ´Â°¡?

Áß°£Âë¿¡¼­ °ªµéÀÌ »ðÀԵǰí Á¦°ÅµÈ´Ù¸é, list°¡ ÃÖ¼±ÀÇ ¼±ÅÃÀÌ´Ù.

°ªµéÀÌ ¾ÕÂÊ¿¡¸¸ »ðÀԵȴٸé, deque³ª list°¡ ´õ ÁÁ°Ú°í,

³¡¿¡¼­¸¸ »ðÀÔ°ú »èÁ¦°¡ ÀÌ·ç¾îÁø´Ù¸é, stackÀ̳ª queue°¡ ÁÁÀ» °ÍÀÌ´Ù.

 

10) µÎ°³ ÀÌ»óÀÇ ¼ö¿­À» Çϳª·Î ÇÕÄ¡´Â ÀÏÀÌ ÀÚÁÖ ÀϾ´Â ¿¬»êÀΰ¡?

±×·¸´Ù¸é, setÀ̳ª list°¡ ÁÁÀº ¼±ÅÃÀÌ µÉ °ÍÀÌ´Ù.

ÀÌ µÑ Áß¿¡ ¾î´À °ÍÀ» ¼±ÅÃÇÒ Áö´Â ¼ø¼­°¡ À¯ÁöµÇ´Â°¡ÀÇ ¿©ºÎ¿¡ µû¶ó °áÁ¤ÇÏ¸é µÈ´Ù.

µÎ °³ÀÇ setÀ» ÇÕÄ¡´Â °ÍÀº ¸Å¿ì È¿À²ÀûÀÎ ¿¬»êÀÌ´Ù.

ÄÝ·º¼ÇÀÇ ¼ø¼­°¡ À¯ÁöµÇÁö ¾Ê°í, list°¡ Á¦°øÇÏ´Â È¿À²ÀûÀÎ splice() ¸â¹öÇÔ¼ö¸¦ »ç¿ëÇϸé,

list¸¦ ¼±ÅÃÇÏ´Â °ÍÀÌ ÁÁ°Ú´Ù. ¿Ö³ÄÇϸé, ÀÌ ¿¬»êÀº ´Ù¸¥ ÄÁÅ×À̳ʿ¡¼­´Â Á¦°øÇÏÁö ¾Ê´Â ¿¬»êÀ̱⠶§¹®ÀÌ´Ù.

 

3. STL¿¡ ¾ø´Â ÄÁÅ×ÀÌ³Ê Å¸ÀÔµé

ÀüÅëÀûÀ¸·Î ¸¹ÀÌ »ç¿ëµÇ°í ÀÖ´Â ÄÁÅ×ÀÌ³Ê Å¸ÀÔµé Áß Ç¥ÁØ ¶óÀ̺귯¸®¿¡´Â µé¾î ÀÖÁö ¾ÊÀº °ÍµéÀÌ ²Ï ÀÖ´Ù.

±× ÀÌÀ¯´Â ´ëºÎºÐÀÇ °æ¿ì, ÀÌ¹Ì Á¦°øµÈ ÄÁÅ×À̳ʵéÀ» ÀûÀýÇÏ°Ô ÀÌ¿ëÇϸé

º¸´Ù ¾ÆÁÖ ±¤¹üÀ§ÇÑ ¿ëµµ·Î ´Ù¾çÇÏ°Ô »ç¿ëµÉ ¼ö Àֱ⠶§¹®ÀÌ´Ù.

 

¿ì¼± tree ÄÝ·º¼ÇÀÌ ¾ø´Ù. ±×·¯³ª, set ŸÀÔÀº ³»ºÎÀûÀ¸·Î ÀÌÁø °Ë»öÆ®¸®ÀÇ ÇüŸ¦ »ç¿ëÇÏ¿© ±¸ÇöµÇ¾î ÀÖ´Ù.

´ÙÂ÷¿ø ¹è¿­µµ ¾ø´Ù. ±×·¯³ª, vector¸¦ ¿ø¼Ò·Î °¡Áö´Â vector·Î ¸¸µé¾î ³¾ ¼ö ÀÖ´Ù.

±×·¡ÇÁ°¡ ¾ø´Ù. ±×·¸Áö¸¸, graph¿¡ ´ëÇÑ Ç¥ÇöÀº ´Ù¸¥ ¸ÊÀ» ¿ø¼Ò·Î ÇÏ´Â ¸ÊÀ¸·Î ¸¸µé¾î ³¾ ¼ö ÀÖ´Ù.

sparse ¹è¿­µµ ¾ø´Ù. ÀÌ ¹®Á¦¿¡ ´ëÇÑ ÇØ°áÃ¥Àº graph Ç¥Çö¹æ½ÄÀÌ µÉ ¼ö ÀÖ°Ú´Ù.

Çؽ¬ Å×ÀÌºíµµ ¾ø´Ù. ±×·¯³ª, Çؽ¬ Å×À̺íÀº list³ª setÀ» ¿ø¼Ò·Î ÇÏ´Â vector³ª deque·Î ¸¸µé¾î³¾ ¼ö ÀÖ´Ù.

 

5. vector

 

1. vector °³¿ä

vector ÄÁÅ×ÀÌ³Ê Å¬·¡½º´Â ±âÁ¸ C ¹è¿­ÀÇ °³³äÀ» ÀϹÝÈ­½ÃŲ °ÍÀÌ´Ù.

¹è¿­°ú ¸¶Âù°¡Áö·Î, vectorµµ ÷ÀÚ¿¡ ÀÇÇÑ Á¢±ÙÀÌ °¡´ÉÇÏ´Ù.

¹è¿­°ú vector´Â ´ÙÀ½°ú °°Àº Â÷ÀÌÁ¡À» °¡Áö°í ÀÖ´Ù.

-> vectorÀÇ Å©±â´Â µ¿ÀûÀ¸·Î º¯ÇÒ ¼ö ÀÖ´Ù. »õ·Î¿î ¿ø¼Ò¸¦ vectorÀÇ ³¡À̳ª Áß°£¿¡ »ðÀÔÇÒ ¼ö ÀÖ´Ù.

            ¸Þ¸ð¸® °ü¸®´Â È¿À²ÀûÀÌ°í ÀÚµ¿ÀûÀ¸·Î ´Ù·ç¾îÁø´Ù.

            ±×·¯³ª, vector Áß°£¿¡ ¿ø¼Ò¸¦ »ðÀÔÇÒ ¶§´Â listó·³ È¿À²ÀûÀÌÁö ¾Ê´Ù´Â Á¡¿¡ ÁÖ¸ñÇØ¾ß ÇÑ´Ù.

            ¸¹Àº »ðÀÔ ¿¬»êÀ» ¼öÇàÇÑ´Ù¸é, vector´ë½Å¿¡ list¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù.

 

vector¿Í deque ¸ðµÎ À妽ÌÀÌ °¡´ÉÇÑ ÀڷᱸÁ¶ÀÌ´Ù.

ÀÌ µÑÀÇ °¡Àå Å« Â÷ÀÌÁ¡Àº dequeÀº ÄÁÅ×À̳ÊÀÇ ¾Õ°ú ³¡¿¡¼­ÀÇ »ðÀÔÀÌ È¿À²ÀûÀÎ ¹Ý¸é¿¡,

vector¿¡¼­´Â ³¡¿¡¼­ »ðÀÔÇÒ ¶§¸¸ È¿À²ÀûÀ̶ó´Â °ÍÀÌ´Ù.

ÀϹÝÀûÀ¸·Î vector¸¦ »ç¿ëÇÏ´Â °ÍÀÌ Á»´õ ÀÛÀº ½ÇÇàÈ­ÀÏÀ» ¸¸µé ¼ö ÀÖ´Â ¹Ý¸é¿¡,

dequeÀº ¼öÇàµÇ´Â ¿¬»êÀÇ Á¾·ù¿¡ µû¶ó Á¶±Ý ºü¸¥ ÇÁ·Î±×·¥À» ¸¸µé±âµµ ÇÑ´Ù.

 

vector¸¦ »ç¿ëÇÏ·Á¸é vector Çì´õÈ­ÀÏÀ» Æ÷ÇÔ½ÃÄÑ¾ß ÇÑ´Ù.

            #include <vector>

 

2. vector°¡ Á¦°øÇÏ´Â ÇÔ¼öµé

1) º¤ÅÍÀÇ ¼±¾ð°ú ÃʱâÈ­

vector´Â ÅÛÇø´ Ŭ·¡½ºÀ̹ǷΠ¿ø¼ÒÀÇ Å¸ÀÔÀ» ¸í½ÃÇØÁÖ¾î¾ß ÇÑ´Ù.

            ex) vector<int> vec_one(10);

 

2) ŸÀÔ Á¤ÀÇ

            ex) vector<int>::iterator location;

 

3) ÇÔ¼öµé...

assign()

swap()

at() : ÷ÀÚ ¿¬»êÀÚ¿Í µ¿ÀÏÇÑ ÀÎÀÚ¸¦ °¡Áö°í µ¿ÀÏÇÑ °ªÀ» ¹ÝȯÇÑ´Ù.

front() : vectorÀÇ ¸Ç ¾Õ¿¡ ÀÖ´Â ¿ø¼Ò¸¦ ¹Ýȯ

back() : ¸Ç ¸¶Áö¸· ¿ø¼Ò¸¦ ¹Ýȯ

 

size() : ÇöÀç vector°¡ °¡Áö°í ÀÖ´Â ¿ø¼ÒÀÇ °¹¼ö

capacity() : »õ·Î¿î ¸Þ¸ð¸® ÇÒ´ç¾øÀÌ vector°¡ È®ÀåµÉ ¼ö ÀÖ´Â ÃÖ´ë »çÀÌÁî

max_size() : vector°¡ °¡Áú ¼ö ÀÖ´Â »çÀÌÁîÀÇ »óÇѼ±

reserve()

empty()

resize()

push_back(), pop_back(), insert(), erase()

begin(), end(), rbegin(), rend()

find(), count()

sort(), merge()

 

cf) À¯¿ëÇÑ generic ¾Ë°í¸®Áòµé

À̸§

¿ëµµ

fill

ÁÖ¾îÁø ÃʱⰪÀ¸·Î º¤Å͸¦ ä¿î´Ù.

copy

¼ö¿­À» º¹»çÇÑ´Ù.

generate

¹ß»ý±â(generator)°¡ »ý¼ºÇÑ °ªÀ» º¤ÅÍ¿¡ Áý¾î³Ö´Â´Ù.

find

Á¶°ÇÀ» ¸¸Á·ÇÏ´Â ¿ø¼Ò¸¦ ã´Â´Ù.

adjacent_find

¿¬¼ÓÀûÀ¸·Î Áߺ¹µÈ ¿ø¼Ò¸¦ ã´Â´Ù.

search

º¤Åͳ»¿¡¼­ ¼­ºê ½ÃÄö½º¸¦ ã´Â´Ù.

max_element, min_element

ÃÖ´ë ¶Ç´Â ÃÖ¼Ò ¿ø¼Ò¸¦ ã´Â´Ù.

reverse

¿ø¼ÒÀÇ ¼ø¼­¸¦ µÚÁý´Â´Ù.

replace

¿ø¼ÒµéÀ» »õ·Î¿î °ªµé·Î ´ëÄ¡ÇÑ´Ù.

rotate

°¡¿îµ¥Á¡À» Áß½ÉÀ¸·Î ¿ø¼ÒµéÀ» ¼øȯ½ÃŲ´Ù.

partition

¿ø¼ÒµéÀ» µÎ±×·ìÀ¸·Î ÂÉ°µ´Ù.

next_permutation

¼ø¿­(permutation)À» »ý¼ºÇÑ´Ù.

inplace_merge

º¤Åͳ»¿¡¼­ÀÇ ÇÕº´?

random_shuffle

º¤Åͳ»ÀÇ ¿ø¼ÒµéÀ» ÀÓÀÇ·Î ¼¯´Â´Ù.

count

Á¶°ÇÀ» ¸¸Á·ÇÏ´Â ¿ø¼ÒµéÀÇ °¹¼ö¸¦ ¼¾´Ù.

accumulate

º¤ÅͷκÎÅÍÀÇ Á¤º¸¸¦ °¡Áö°í ÇϳªÀÇ °ªÀ» ¸¸µé¾î ³½´Ù.

inner_product

µÎ º¤ÅÍÀÇ ³»ÀûÀ» ±¸ÇÑ´Ù.

equal

µÎº¤Å͸¦ Çѽ־¿ ºñ±³ÇÏ¿© °°ÀºÁö¸¦ °Ë»çÇÑ´Ù.

lexicographical_compare

»çÀü½Ä ºñ±³

transform

º¤ÅÍ¿¡ º¯È¯À» Àû¿ëÇÑ´Ù.

partial_sum

°ªµéÀÇ ºÎºÐÇÕÀ» ±¸ÇÑ´Ù.

adjacent_difference

ÀÌ¿ôÇÏ´Â °ªµéÀÇ Â÷¸¦ ±¸ÇÑ´Ù.

for_each

°¢ ¿ø¼Òµé¿¡ ´ëÇØ ÇÔ¼ö¸¦ ¼öÇàÇÑ´Ù.

 

 

3. vector<bool>

flip() : È£ÃâµÇ¾úÀ» ¶§, ÀÌ ÇÔ¼ö´Â º¤ÅÍÀÇ ¸ðµç ºñÆ®¸¦ µÚÁý´Â´Ù.

swap()

 

6. list

 

1. list °³¿ä

list´Â ¾ÕÂÊ°ú µÞÂÊ¿¡¼­ »õ·Î¿î °ªÀ» »ðÀÔÇϰųª »èÁ¦ÇÒ ¼ö ÀÖÀ¸¸ç,

¹Ýº¹ÀÚ·Î À§Ä¡¸¦ ÁöÁ¤ÇÏ¿© listÀÇ Áß°£¿¡¼­µµ ¿ø¼ÒµéÀ» Ãß°¡Çϰųª »èÁ¦ÇÒ ¼ö ÀÖ´Ù.

list´Â ¼±Çü ±¸Á¶ÀÌ´Ù. listÀÇ ¿ø¼ÒµéÀº ÷ÀÚ¿¡ ÀÇÇؼ­´Â Á¢±ÙÀÌ ºÒ°¡´ÉÇÏ°í,

¿ø¼ÒµéÀ» Á¢±ÙÇÏ·Á¸é ¸ðµç °ªµéÀ» ¼±ÇüÀûÀ¸·Î ¼øȸÇØ¾ß ÇÑ´Ù.

 

list¸¦ »ç¿ëÇÒ ¶§´Â ¹Ýµå½Ã list Çì´õ È­ÀÏÀ» Æ÷ÇÔÇØ¾ß ÇÑ´Ù.

            #include <list>

 

2. list °¡ Á¦°øÇÏ´Â ÇÔ¼öµé

1) listÀÇ ¼±¾ð°ú ÃʱâÈ­

            ex) list<int> list_one;

 

2) ŸÀÔ Á¤ÀÇ

            ex) list<int>::iterator location;

 

3) ÇÔ¼öµé...

push_back(), push_front(), insert(), splice(), merge(), splice()

pop_front(), pop_back(), erase(), remove(), remove_if(), unique()

front(), back(), begin(), end(), rbegin(), rend()

size(), empty(), resize()

sort()

 

7. stack°ú queue

 

1. °³¿ä

stackÀÇ ¿¹·Î´Â, Ã¥»óÀ§¿¡ ³õÀº ¼­·ùöÀ̳ª ÂùÀå¿¡ ³õÀÎ Á¢½ÃµéÀÌ ÀÖ´Ù.

Áï, stack¿¡¼­ Á¦°ÅµÇ´Â ¾ÆÀÌÅÛÀº °¡Àå ÃÖ±Ù¿¡ stack¿¡ Ãß°¡µÈ ¾ÆÀÌÅÛÀÌ´Ù.

ÇÑÆí, queueÀÇ ¿¹·Î ÀºÇà¿¡ ¼± ÁÙÀ̳ª ¿µÈ­°ü ¾Õ¿¡ ¼± ÁÙÀ» µé ¼ö ÀÖ´Ù.

¿©±â¼­ »ðÀÔÀº queueÀÇ µÚ¿¡¼­ ÀÌ·ç¾îÁö°í(»ç¶÷ÀÌ »õ·Î ÁÙÀ» ¼³ ¶§Ã³·³),

¾ÆÀÌÅÛÀÇ »èÁ¦´Â queueÀÇ ¾Õ¿¡¼­ ÀÌ·ç¾îÁø´Ù(°ü°´ÀÌ ¿µÈ­°ü¿¡ µé¾î°¡´Â °Íó·³).

queue¿¡¼­ÀÇ »èÁ¦¼ø¼­´Â stack°ú´Â ¹Ý´ëÀÌ´Ù.

queue¿¡¼­´Â »èÁ¦µÈ ¾ÆÀÌÅÛÀÌ queue¿¡ °¡Àå ¿À·§µ¿¾È ÀÖ¾ú´ø ¿ø¼ÒÀÌ´Ù.

Ç¥ÁØ ¶óÀ̺귯¸®¿¡¼­´Â stack°ú queue°¡ ¸ðµÎ ¾î´ðÅÍ(adaptor)ÀÌ°í,

À̵éÀº ½ÇÁúÀûÀ¸·Î °ªÀ» ÀúÀåÇϴµ¥ »ç¿ëÇÏ´Â ÄÁÅ×À̳ʸ¦ ¹ÙÅÁÀ¸·Î ¸¸µé¾îÁø´Ù.

stackÀº vector, list, dequeÀ¸·ÎºÎÅÍ ¸¸µé¾îÁö°í, queue´Â list³ª dequeÀ¸·ÎºÎÅÍ ¸¸µé¾îÁø´Ù.

 

2. stack °³¿ä

stackÀº ´ÙÀ½ ¿¬»êµéÀ» ±¸ÇöÇÑ °´Ã¼·Î Á¤ÀǵǾî ÀÖ´Ù.

empty()           stackÀÌ ºñ¾úÀ¸¸é Âü(true)À» ¹Ýȯ

size()            stack¿¡ ´ã±ä ¿ø¼ÒÀÇ °¹¼ö¸¦ ¹Ýȯ

top()             stackÀÇ ¸Ç À§¿¡ À§Ä¡ÇÑ ¿ø¼Ò¸¦ ¹Ýȯ(Áö¿ìÁö´Â ¾Ê´Â´Ù)

push(newElement)  stackÀÇ ¸Ç À§¿¡ ¿ø¼Ò¸¦ »õ·Î Ãß°¡

pop()             stackÀÇ ¸Ç À§¿¡ À§Ä¡ÇÑ ¿ø¼Ò¸¦ »èÁ¦(¹ÝȯÇÏÁö´Â ¾Ê´Â´Ù)

 

front ¿ø¼Ò¸¦ Á¢±ÙÇÏ´Â ¿¬»ê°ú »èÁ¦ÇÏ´Â ¿¬»êÀº º°µµÀÇ ¿¬»êÀ¸·Î Á¦°øµÈ´Ù´Â Á¡À» ¸í½ÉÇØ¾ß ÇÑ´Ù.

stackÀ» »ç¿ëÇÏ´Â ÇÁ·Î±×·¥Àº stackÀ» ¹Ø¹ÞħÇÏ°í ÀÖ´Â ÄÁÅ×ÀÌ³Ê Å¸ÀÔ(¿¹¸¦ µé¸é, vector)¿¡ ´ëÇÑ Çì´õ È­ÀÏ »Ó¸¸¾Æ´Ï¶ó

stack Çì´õÈ­ÀÏÀ» Æ÷ÇÔÇØ¾ß ÇÑ´Ù.

            #include <stack>

            #include <vector>

 

3. stackÀÇ ¼±¾ð°ú ÃʱâÈ­

stackÀÇ ¼±¾ðÀº µÎ°³ÀÇ ÀÎÀÚ¸¦ ¸í½ÃÇØ¾ß ÇÑ´Ù.

Çϳª´Â stackÀÌ ´ã°ÔµÉ ¿ø¼ÒÀÇ Å¸ÀÔÀÌ°í, ³ª¸ÓÁö Çϳª´Â ¿ø¼ÒµéÀ» ´ã´Âµ¥ »ç¿ëÇÒ ÄÁÅ×À̳ÊÀÌ´Ù.

stackÀº ÄÁÅ×À̳ʷΠvector³ª deque¸¦ °¡Àå ¸¹ÀÌ ¾²°í, listµµ ÄÁÅ×À̳ʷΠ»ç¿ëÇÒ ¼ö ÀÖ´Ù.

deque¸¦ »ç¿ëÇϸé Á» ´õ ºü¸£°í, vector¸¦ »ç¿ëÇϸé Å©±â°¡ Á» ÀÛ¾ÆÁø´Ù.

            stack<int, vector<int> > stackOne;

            stack<double, deque<double> > stackTwo;

            stack<Part*, list<Part* > > stackThree;

 

4. queue °³¿ä

queue´Â ÀϹÝÀûÀ¸·Î ´ÙÀ½ ¿¬»êµéÀ» ±¸ÇöÇÑ °´Ã¼·Î¼­ Á¤ÀǵȴÙ.

empty()           queue°¡ ºñ¾úÀ¸¸é Âü(true)À» ¹Ýȯ

size()            queue¿¡ ´ã±ä ¿ø¼ÒÀÇ °¹¼ö¸¦ ¹Ýȯ

front()           queueÀÇ ¸Ç ¾Õ¿¡ À§Ä¡ÇÑ ¿ø¼Ò¸¦ ¹Ýȯ(»èÁ¦ÇÏÁö ¾Ê´Â´Ù)

back()            queueÀÇ ¸Ç µÚ¿¡ À§Ä¡ÇÑ ¿ø¼Ò¸¦ ¹Ýȯ

push(newElement)  queueÀÇ ¸Ç µÚ¿¡ ¿ø¼Ò¸¦ »õ·Î Ãß°¡

pop()             queueÀÇ ¸Ç ¾Õ¿¡ À§Ä¡ÇÑ ¿ø¼Ò¸¦ »èÁ¦(¹ÝȯÇÏÁö ¾Ê´Â´Ù)

 

queueÀÇ ¸Ç¾Õ¿¡ À§Ä¡ÇÑ ¿ø¼Ò¸¦ Á¢±ÙÇÏ´Â ¿¬»ê°ú »èÁ¦ÇÏ´Â ¿¬»êÀº º°µµÀÇ ¿¬»êÀ¸·Î ¼öÇàµÈ´Ù´Â Á¡À» ÁÖÀÇÇØ¾ß ÇÑ´Ù.

queue´Â ¹Ýº¹ÀÚ¸¦ ±¸ÇöÇÏÁö ¾Ê±â ¶§¹®¿¡, generic ¾Ë°í¸®ÁòµéÀº queue¿¡ Àû¿ëÇÒ ¼ö ¾ø´Ù.

queue¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥Àº queueÀÇ ÄÁÅ×ÀÌ³Ê Å¸ÀÔ(¿¹¸¦ µé¾î, list)¿¡ ´ëÇÑ Çì´õÆÄÀϻӸ¸ ¾Æ´Ï¶ó,

queue È­ÀÏÀ» Æ÷ÇÔÇØ¾ß ÇÑ´Ù.

            #include <queue>

            #include <list>

 

5. queueÀÇ ¼±¾ð°ú ÃʱâÈ­

queue¿¡ ´ëÇÑ ¼±¾ðÀº °ªÀ» ´ã°í ÀÖ´Â ÄÁÅ×ÀÌ³Ê¿Í ¿ø¼Ò ŸÀÔÀ» ¸í½ÃÇØ¾ß ÇÑ´Ù.

queue´Â ÄÁÅ×ÀÌ³Ê Å¸ÀÔÀ¸·Î list³ª deque¸¦ °¡Àå ¸¹ÀÌ »ç¿ëÇÑ´Ù.

list¸¦ »ç¿ëÇϸé Äڵ尡 ÀÛ¾ÆÁö´Â ¹Ý¸é¿¡, deque¸¦ »ç¿ëÇϸé Äڵ尡 Á» »¡¶óÁø´Ù.

´ÙÀ½Àº queue¸¦ ¼±¾ðÇÏ´Â ¿¹ÀÌ´Ù.

            queue<int, list<int> > queueOne;

            queue<double, deque<double> > queueTwo;

            queue<Part*, list<Part* > > queueThree;