Ãâó: 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;