C++ Programming HOW-TO
Al Dev (Alavoor Vasudevan)
alavoor (at) yahoo.com
Áö¿ë
Á¤
ways (at) gon.kaist.ac.kr
41.8
2002-03-31
Á¤Áö¿ë
¼öÁ¤ÆÇ ¹ø¿ª
5.0
2000-06-15
±èÁöÈñ, À±ÁÖö
ÃÖÃÊ ¹ø¿ª
ÀÌ ¹®¼´Â C++¿¡ °üÇÑ URL°ú C++ online Ã¥¿¡ ´ëÇÑ ¸µÅ©, C++ ÇÁ·Î±×·¡¹Ö ÆÁ µîÀ» Æ÷°ýÀûÀ¸·Î Á¦°øÇÑ´Ù. ÀÌ ¹®¼´Â C++¿¡¼ °Þ´Â ´Ù¾çÇÑ ¸Þ¸ð¸® °ü·Ã ¹®Á¦¸¦ ÇØ°áÇØÁÖ´Â Java¿Í ºñ½ÁÇÑ libraryµµ Á¦°øÇÑ´Ù. ÀÌ library¸¦ ÀÌ¿ëÇϸé, java ¼Ò½ºÄڵ带 C++·Î ÄÄÆÄÀÏ ÇÒ ¼öµµ ÀÖ´Ù. ÀÌ ¹®¼´Â "C++ ¾ð¾îÀÇ Áý"¿ªÇÒÀ» ÇÑ´Ù.
ÀÌ ¹®¼¿¡¼ Á¦°øµÇ´Â Á¤º¸´Â C++ ¾ð¾î¸¦ ÀûÀýÈ÷ »ç¿ëÇÏ°í ¸ðµç ¿î¿µÃ¼Á¦ - ¸®´ª½º, MS-DOS, BeOS, Apple Macintosh OS, Microsoft Windows 95/98/NT/2000, OS/2, IBM OSes (MVS, AS/400 µî..), VAX VMS, Novell Netware, À¯´Ð½º-like OSµé(Solaris, HPUX, AIX, SCO, Sinix, BSD µî..)°ú ±âŸ C++À» Áö¿øÇÏ´Â ¸ðµç ¿î¿µÃ¼Á¦(¾Æ¸¶µµ ¼¼»óÀÇ °ÅÀÇ ¸ðµç ¿î¿µÃ¼Á¦°¡ ÀÌ¿¡ ¼ÓÇÒ °ÍÀÌ´Ù) - ¿¡ Àû¿ëÇÏ´Â °ÍÀ» µµ¿ÍÁÙ °ÍÀÌ´Ù.
¼¹®
(ÀÌ ¹®¼ÀÇ ÃֽůÇÀº http://www.milkywaygalaxy.freeservers.com ¿¡¼ ±¸ÇÒ ¼ö ÀÖ´Ù)
ÀÌ ¹®¼ÀÇ ¸ñÀûÀº C++¿¡ °üÇÑ URL°ú C++ online Ã¥¿¡ ´ëÇÑ ¸µÅ©, C++ ÇÁ·Î±×·¡¹Ö ÆÁ µîÀ» Æ÷°ýÀûÀ¸·Î Á¦°øÇÏ´Â °ÍÀÌ´Ù. ¶ÇÇÑ, ÀÌ ¹®¼´Â Java ½ºÅ¸ÀÏÀÇ String class, string tokenizer, ¸Þ¸ð¸® ÇÔ¼öµî ÀϹÝÀûÀÎ C++ ÇÁ·Î±×·¥¿¡¼ ³Î¸® ¾²ÀÏ ¼ö ÀÖ´Â ¸¹Àº ÇÔ¼öµéÀ» Á¦°øÇÑ´Ù.
C++ °ú Java´Â ¿À´Ã³¯ ¸¹Àº ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÁ§Æ®¿¡¼ ¾²À̰í ÀÖ´Ù. ÇÁ·Î±×·¡¸Ó´Â C++°ú Java¸¦ ¹ø°¥¾Æ°¡¸ç ¾²°ÔµÉ °ÍÀ̰í, ÀÌ Java ½ºÅ¸ÀÏÀÇ class°¡ ¸Å¿ì À¯¿ëÇÔÀ» ¾Ë°Ô µÉ °ÍÀÌ´Ù.
ÀÌ library¿Í C++ Ç¥ÁØ ¶óÀ̺귯¸®ÀÇ »ç¿ë¹ýÀ» ¾Ë·ÁÁÙ ´Ù¾çÇÑ ¿¹Á¦°¡ Á¦½ÃµÉ °ÍÀÌ´Ù.
ÀÌ ¹®¼´Â C++¿¡ ´ëÇÑ ±³°ú¼°¡ ¾Æ´Ï¸ç, ÀÌ¿¡ ´ëÇØ¼´Â ÀÌ¹Ì ¸î°¡Áö ÁÁÀº on-line Ã¥µéÀÌ ÀÖ´Ù.
C++ÀÌ ²Ï ¿À·£½Ã°£µ¿¾È »ç¿ëµÇ¾î¿Ô±â ¶§¹®¿¡, ¸Å¿ì ¸¹Àº ¼öÀÇ C++ ¹®¼/±Û/Æ©Å丮¾óÀÌ ÀÎÅÍ³Ý»ó¿¡ Á¸ÀçÇÑ´Ù.
¸¸¾à ´ç½ÅÀÌ C++À» óÀ½ Á¢ÇÏ´Â °ÍÀ̰í, C++ ÇÁ·Î±×·¥À» Â¥ º» ÀûÀÌ ¾ø´Ù¸é, Àå¿¡ ¸µÅ©µÇ¾î ÀÖ´Â on-line C++ Ã¥À» ¸ÕÀú Àо°Å³ª, Amazon À̳ª barnes°ú °°Àº °÷¿¡¼ C++ Ã¥À» »ç º¼ °ÍÀ» ÃßõÇÑ´Ù.
´©±º°¡°¡ ¸»Çßµí - C/C++ ¾ð¾î´Â OS³ª µð¹ÙÀ̽ºµå¶óÀ̹ö, ºü¸¥ ÀÀ´äÀ» ÇÊ¿äÇÏ´Â real-time ÇÁ·Î±×·¥µîÀ» ¸¸µå´Â ½Ã½ºÅÛ ¿£Áö´Ï¾î³ª ¾²¶ó°í Çϰí,
´ç½ÅÀº 2002³âº¸´Ù ÄÄÇ»ÅͰ¡ ¸î¹é¸¸¹è »¡¶óÁú 2005³âÀ» »ý°¢Çϸé Java³ª PHP-scriptingÀ» ½á¾ßÇÑ´Ù.
Çϵå¿þ¾î ´Â Á¡Á¡ ½Î¸é¼µµ, »¡¶óÁø´Ù.
C++ ÇÁ·Î±×·¥? C++ vs. Java/PHP
C++Àº °¡Àå °·ÂÇÑ ¾ð¾îµé Áß ÇϳªÀ̰í, Java³ª PHP-scripting °°Àº °ÍÀÌ ³ªÅ¸³µÁö¸¸, ¾ÕÀ¸·Îµµ ¿À·£ ½Ã°£µ¿¾È ¾²ÀÌ°Ô µÉ °ÍÀÌ´Ù.
½Ç½Ã°£ÀÇ ¸Å¿ì ºü¸¥ ÀÀ´äÀ» ÇÊ¿äÇÏ´Â ÇÁ·Î±×·¥Àº C³ª C++À» ¾´´Ù.
C++Àº ¸Å¿ì ºü¸£°Ôµ¿ÀÛÇϰí,
½ÇÁ¦·Î Javaº¸´Ù 10¹è¿¡¼ 20¹è Á¤µµ ºü¸£´Ù .
Java´Â C++ÀÇ "ÀÚ¼Õ"ÀÌ´Ù.
JavaÀÇ ´Ü ÇϳªÀÇ ¹®Á¦Á¡Àº ¹Ù·Î - "Java ´Â ´À¸®´Ù!!" .
VMÀ§¿¡¼ µµ´Â Java ¹ÙÀÌÆ®ÄÚµå´Â ÄÄÆÄÀÏµÈ ½ÇÇàÄڵ庸´Ù ´À¸®´Ù.
Java´Â JIT(Just-In-Time) ÄÄÆÄÀÏ·¯À§¿¡¼ ´õ ºü¸£°Ô µ¹Áö¸¸, ¿©ÀüÈ÷ C++º¸´Ù´Â ´À¸®´Ù.
ÃÖÀûÈ µÈ C/C++ ÇÁ·Î±×·¥Àº JIT ³ª ±× ÀÌÀüÀÇ ÄÄÆÄÀÏ·¯·Î ÄÄÆÄÀÏ µÈ Java Äڵ庸´Ù
¾à 3 ¿¡¼ 4¹è Á¤µµ ºü¸£´Ù!!
±×·¸´Ù¸é, ¿Ö »ç¶÷µéÀÌ Java¸¦ ¾²´Â°¡? ÀÌ´Â Java°¡ ¼ø¼öÇÑ °´Ã¼ÁöÇâÀ» Áö¿øÇϰí, JavaÀÇ ÀÚµ¿ÈµÈ ¸Þ¸ð¸® °ü¸®·Î ÀÎÇØ ÇÁ·Î±×·¡¹ÖÇϱⰡ ½¬¿ì¸ç, ÇÁ·Î±×·¡¸ÓµéÀÌ Á÷Á¢ ¸Þ¸ð¸® °ü¸®Çϱ⸦ ½È¾îÇϱ⠶§¹®ÀÌ´Ù.
ÀÌ ¹®¼´Â C++ÀÇ ¸Þ¸ð¸® °ü¸®¸¦ ÀÚµ¿ÈÇÏ¿© ÈξÀ »ç¿ëÇϱ⠽±°Ô ÇϰíÀÚ Çß´Ù.
¿©±â¼ ³ª¿À´Â library´Â C++À» Java ¸¸Å ½±°Ô ´À³¢°Ô ÇØÁÙ °ÍÀ̰í, C++ÀÌ Java¿Í °æÀïÇÒ ¼ö ÀÖµµ·Ï ÇØÁÙ °ÍÀÌ´Ù.
¼öµ¿ÀûÀÎ ¸Þ¸ð¸® °ü¸®¸¦ À§ÇØ C++ ÇÁ·Î±×·¥ µð¹ö±ëÀÇ ´ëºÎºÐ ½Ã°£ÀÌ ¼Ò¸ðµÈ´Ù.
ÀÌ ¹®¼´Â µð¹ö±ë ½Ã°£À» ÁÙÀ̱â À§ÇÑ ¸î°¡Áö ¾ÆÀ̵ð¾î¿Í ÆÁÀ» ÁÙ °ÍÀÌ´Ù.
¾ðÁ¦ C++À» ½á¾ßÇÏ°í ¾ðÁ¦ Java/PHP¸¦ ½á¾ßÇϴ°¡?
¾Æ·¡¿Í °°Àº °æ¿ì¿£ C++À» ½á¶ó:
½ÇÇà¼Óµµ¿Í ¼º´ÉÀÌ ¸Å¿ì Áß¿äÇÑ ÇÁ·Î±×·¥À» ¸¸µé ¶§.
¸¸µå´Â ÇÁ·Î±×·¥ÀÇ »ç¿ëÀÚ ¼ö°¡ ¸¹À» ¶§. C++Àº ÄÄÆÄÀÏ-¸µÅ·-µð¹ö±ë »çÀÌŬÀÌ ÇÊ¿äÇϱ⠶§¹®¿¡, ÇÁ·Î±×·¥ °³¹ß¿¡ ´õ ¸¹Àº ½Ã°£ÀÌ ¼Ò¿äµÈ´Ù.
µû¶ó¼ »ç¿ëÀÚ¼ö°¡ ÃæºÐÈ÷ ¸¹À» ¶§¿¡³ª Àû´çÇÏ´Ù. ½ÇÇàÆÄÀÏÀ» ¸¸µé±â À§ÇØ ¸¹Àº ¼öÀÇ objectÆÄÀÏÀ» ¸µÅ©ÇÏ´Â °ÍÀº ²Ï ½Ã°£ÀÌ °É¸°´Ù.
(¸µÅ©Çϴµ¥ °É¸®´Â ½Ã°£À» ÁÙÀ̱â À§ÇØ archive³ª ¶óÀ̺귯¸®, °øÀ¯ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.)
C++ÇÁ·Î±×·¡¹Ö °æÇèÀÌ ¸¹À» ¶§.
Java/PHP¸¦ ½á¾ßÇÒ °æ¿ì:
(C/C++·Î ÀÛ¼ºµÇ´Â °Í¿¡ ºñÇØ¼) ½ÇÇà¼Óµµ¿Í ¼º´ÉÀÌ Áß¿äÇÏÁö ¾ÊÀ» ¶§.
»ý»ê ºñ¿ëÀ» ³·Ãß±â À§ÇØ - ÄÄÆÄÀÏ-¸µÅ© »çÀÌŬÀÌ ¾ø±â ¶§¹®¿¡, Java/PHP´Â C++º¸´Ù °³¹ßÀÌ ºü¸£´Ù.
ºü¸¥ °³¹ßÀÌ ÇÊ¿äÇÒ ¶§.
ÄÚµå À¯Áöº¸¼ö¸¦ ½±°Ô Çϱâ À§ÇØ. C++ À» À¯Áöº¸¼öÇÏ´Â °ÍÀÌ Java³ª PHP-scripting º¸´Ù ÈξÀ ¾î·Æ´Ù.
Java¿Í PHP-scriptingÀº ¹Ì·¡ÀÌ´Ù, Çϵå¿þ¾îÀÇ ¼Óµµ´Â ºÐÀÚ¿Í ¿øÀÚ, ¿øÀÚº¸´Ù ÀÛÀº Å©±âÀÇ ÄÄÇ»ÅÍ µµÀÔ°ú ÇÔ²² ±ÞµîÇÒ °ÍÀÌ´Ù.
¹Ì·¡ÀÇ ÄÄÇ»ÅÍ´Â ¿À´Ã³¯ ÄÄÇ»ÅÍÀÇ ¼öÁ¶¹èÀÇ ¼º´ÉÀ» °¡Áú °ÍÀÌ´Ù. ¹Ì·¡¿¡ Çϵå¿þ¾î ¼º´ÉÀÌ Áøº¸ÇÔ°ú ÇÔ²², Java³ª PHP-scriptÀÇ ½ÇÇà ¼º´ÉÀº Áß¿äÄ¡ ¾Ê°Ô µÉ °ÍÀÌ´Ù.
¿À´Ã³¯ ´ç½ÅÀÌ ¾²´Â ÄÄÇ»ÅÍ(ÇöÀç´Â 2002³âÀÌ´Ù.)´Â ¾öû³ª°Ô ´À¸®°í, ±â¾î°¡°í ÀÖÀ¸¸ç, ÃæºÐÈ÷ ºü¸£Áö ¸øÇÏ´Ù.
NOTE: Java ÄÄÆÄÀÏ·¯ (JIT ³ª ´Ù¸¥ °Íµé)¿¡ ¸¹Àº Áøº¸°¡ ÀÖ¾ú´Ù. Java ÇÁ·Î±×·¥Àº GNU GCJ http://gcc.gnu.org/java·Î ÄÄÆÄÀÏ µÉ ¼ö ÀÖ´Ù.
GCJ´Â °£ÆíÇϰí, ÃÖÀûȵǾîÀÖÀ¸¸ç, Áøº¸ÀûÀÎ Java ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ À§ÇÑ ÄÄÆÄÀÏ·¯ÀÌ´Ù.
GCJ´Â Java source Äڵ带 ¸Ó½Å ÄÚµå·Î ¹Ù·Î ÄÄÆÄÀÏ ÇÒ ¼öµµ ÀÖ°í, Java ¹ÙÀÌÆ®ÄÚµå(class file)·Î ÄÄÆÄÀÏ ÇÒ ¼öµµ ÀÖ´Ù.
GCJ Á¤º¸:
GNU GCJ ȨÆäÀÌÁöhttp://gcc.gnu.org/java,
GNU GCJ ÀÇ Redhat RPM
http://www.redhat.com/apps/download.
¿©±â·Î °¡¼ "Find lastest RPMs" section¿¡¼ 'gcc-java'¿Í 'libgcj'·Î
searchÇÏ¸é µÈ´Ù.
Redhat GCJ ¼³Ä¡ °¡À̵å
http://www.redhat.com/devnet/articles/gcj.pdf
¾î¶² °ÍÀ» ¼±ÅÃÇÒ °ÍÀΰ¡. Ada95, C, C++, Java ¾Æ´Ï¸é PHP?
¾ð¾îÀÇ ¼±ÅÃÀº ¾î·Á¿î ÀÏÀÌ´Ù. ¿©±â¿£ ³Ê¹«³ª ¸¹Àº °í·ÁÇÒ »çÇ×ÀÌ ÀÖ´Ù - °³¹ßÀÚ,
»ç¶÷ÀÇ ´É·Â, ºñ¿ë, Åøµé, Á¤Ã¥ (±¹°¡ÀÇ Á¤Ä¡ Á¤Ã¥±îÁöµµ), »ç¾÷°¡³ª ȸ»çµé¿¡ ´ëÇÑ
¿µÇâ±îÁö.
±â¼úÀûÀÎ ÀÌÀ¯·Î´Â ÃÖÀûÀÇ ¾ð¾îÀÏÁö¶óµµ ´Ü¼øÈ÷ Á¤Ä¡ÀûÀÎ °áÁ¤À¸·Î ÀÎÇØ ¼±ÅõÇÁö
¸øÇÒ ¼öµµ ÀÖ´Ù.
David WheelerÀÇ ¾ð¾î ºñ±³¸¦ º¸ÀÚ.
Ada ºñ±³ Â÷Æ®.
Ada°¡ 93%, Java´Â 72%, C++Àº 68% C´Â 53%À» °¢°¢ ¹Þ¾Ò´Ù.
C++°ú Java´Â Á¡¼ö¸é¿¡¼´Â ºñ½ÁÇÏ´Ù (4% Â÷ÀÌ).
AdaÀÇ °³¹ß ºñ¿ëÀº
Stephen F. Zeigler¿¡ µû¸£¸é C++ÀÇ ¹ÝÀýÀÌ´Ù.
Ada95´Â ¾Æ·¡¿¡¼ ±¸ÇÒ ¼ö ÀÖ´Ù -
Ada ȨÆäÀÌÁö http://www.gnuada.org.
Google Ada index
C++ ÄÄÆÄÀÏ·¯´Â C ÄÄÆÄÀÏ·¯º¸´Ù ÈξÀ º¹ÀâÇϰí, C++Àº Cº¸´Ù ¾à°£ ´À¸®°Ô µ¿ÀÛÇÒ
¼ö ÀÖ´Ù.
C ÄÄÆÄÀÏ·¯´Â ÃæºÐÈ÷ ¿À·¨µ¿¾È Àß ¾²¿©Á®¿Ô´Ù.
¸î¸î ½Ã½ºÅÛ¿¡¼, ´ç½ÅÀº »ý¼ºµÈ Äڵ带 ÃÖÀûÈ Çϱâ À§ÇØ ¸î°¡Áö ¿É¼ÇÀ» ¾µ ¼ö
ÀÖ´Ù.
¿À´Ã³¯, C´Â ÁÖ·Î ¿î¿µÃ¼Á¦³ª µð¹ÙÀ̽º µå¶óÀ̹ö, ºü¸£°Ô ÀÛµ¿ÇؾßÇÏ´Â ÇÁ·Î±×·¥À»
¾²±â À§ÇØ ·Î¿ì·¹º§ ½Ã½ºÅÛ ÇÁ·Î±×·¡¹Ö¿¡ ¾²ÀδÙ.
Note: ÀÌ HOWTO¿¡ Á¦°øµÇ´Â String,
StringBuffer, StringTokenizer class¸¦ ÀÌ¿ëÇÏ¿© C++ Äڵ带 Java¿Í ¿ÏÀüÈ÷ ¶È°°ÀÌ
¾µ ¼ö ÀÖ´Ù. ÀÌ ¹®¼ÀÇ ÀϺδ C++·Î Java class¸¦ Èä³»³¿À¸·Î½á C++°ú JavaÀÇ Â÷À̸¦ ÁÙÀ̰íÀÚ Çß´Ù.
C++°ú Java¸¦ ¿Ô´Ù°¬´ÙÇÏ´Â Java ÇÁ·Î±×·¡¸ÓµéÀº ÀÌ String class¸¦ ÁÁ¾ÆÇÒ °ÍÀÌ´Ù.
¸¸¾à C++ÀÇ ÀÛ¼º-ÄÄÆÄÀÏ-µð¹ö±ë-ÄÄÆÄÀÏ ½ÎÀÌŬÀÌ ½È´Ù¸é, web °³¹ßÀ̳ª ÀϹÝÀûÀÌ ÇÁ·Î±×·¡¹Ö¿¡ ¾²ÀÏ ¼ö ÀÖ´Â PHP°°Àº script ¾ð¾î¸¦ ¾Ë¾Æº¸¾Æ¶ó. PHP³ª PERL°°Àº script¾ð¾î´Â ºü¸¥ ¾îÇø®ÄÉÀÌ¼Ç °³¹ßÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù. PHP´Â ¸î°¡Áö °´Ã¼ÁöÇâÀ» À§ÇÑ Æ¯Â¡µµ °®°í ÀÖ´Ù. PHP HOWTO´Â
http://www.linuxdoc.org/HOWTO/PHP-HOWTO.html (Çѱ۹ø¿ª) ¿¡¼ º¼ ¼ö ÀÖ´Ù.
ÇöÀç C++ ÄÄÆÄÀÏ·¯ÀÇ ¹®Á¦Á¡
C++Àº C¸¦ Æ÷ÇÔÇϱ⠶§¹®¿¡, CÀÇ *³ª»Û* Á¡µéÀ» ¸ðµÎ °®°í ÀÖ´Ù.
¸Þ¸ð¸®ÀÇ ¼öµ¿ ÇÒ´ç°ú ÇØÁ¦´Â Áö·çÇϰí, ¿¡·¯¸¦ ¸¸µé¾î³»±â ÀϾ¥ÀÌ´Ù. ( ¸¦ º¸¶ó).
C ÇÁ·Î±×·¡¹Ö¿¡¼´Â ´ÙÀ½°ú °°Àº °Íµé·Î ÀÎÇØ ¸Þ¸ð¸® ¸¯À̳ª ¿À¹öÇ÷ο찡 ¸Å¿ì ÈçÇÏ´Ù.
Datatype char * and char[]
String functions like strcpy, strcat, strncpy, strncat, etc..
Memory functions like malloc, realloc, strdup, etc..
char *¿Í strcpyÀÇ »ç¿ëÀº
"¿À¹öÇ÷οì",
"°æ°èħ¹ü¿¡·¯(fence past errors)", "¸Þ¸ð¸® ¿À¿°(memory corruption)",
"´Ù¸¥º¯¼ö ħ¹ü(step-on-others-toe)" À̳ª "¸Þ·Î¸® ¸¯(memory leaks)" µîÀÇ ²ûÂïÇÑ ¸Þ¸ð¸® ¹®Á¦¸¦ ÀÏÀ¸Å²´Ù.
¸Þ¸ð¸® ¹®Á¦´Â ¸Å¿ì µð¹ö±ëÀÌ Èûµé°í, µû¶ó¼ °íÄ¡±â´Âµ¥ ¸¹Àº ½Ã°£ÀÌ µç´Ù.
¸Þ¸ð¸® ¹®Á¦´Â ÇÁ·Î±×·¡¸ÓÀÇ »ý»ê¼ºÀ» ¶³¾î¶ß¸°´Ù. ÀÌ ¹®¼´Â C++ÀÇ ÀÌ·¯ÇÑ ´ÜÁ¡À»
ÇØ°áÇϱâ À§ÇØ °í¾ÈµÈ ¿©·¯°¡Áö ¹æ¹ýµéÀ» ÅëÇØ ÇÁ·Î±×·¡¸ÓÀÇ »ý»ê¼ºÀ» ³ôÀ̴µ¥ µµ¿òÀ»
ÁÖ°íÀÚ ÇÑ´Ù.
¸Þ¸ð¸® °ü·Ã ¹ö±×´Â Àâ±â Èûµé°í, °æÇ踹Àº ÇÁ·Î±×·¡¸Óµéµµ ¸Þ¸ð¸® °ü·Ã ¹®Á¦¸¦ °íÄ¡´Â µ¥´Â
¸çÄ¥¿¡¼ ¸îÁÖ°¡ °É¸°´Ù.
¸Þ¸ð¸® ¹ö±×´Â ¸î´Þµ¿¾È ÄÚµå ¼Ó¿¡ ¼û¾î¼ °©ÀÛ½º·± ÇÁ·Î±×·¥ Á¤Áö¸¦ ÀÏÀ¸Å³ ¼ö ÀÖ´Ù.
char * ¿Í C/C++¿¡¼ÀÇ Æ÷ÀÎÅÍ
»ç¿ëÀ¸·Î ÀÎÇÑ ¸Þ¸ð¸® ¹ö±×´Â µð¹ö±ë°ú ÇÁ·Î±×·¥ Á¤Áö·Î ÀÎÇØ ¸Å³â 20¾ï ´Þ·¯¿¡ ÇØ´çÇÏ´Â
½Ã°£ÀÇ ¼Ò¸ð¸¦ ÀÏÀ¸Å²´Ù.
¸¸¾à C++¿¡¼
char * °ú Æ÷ÀÎÅÍ
¸¦ »ç¿ëÇÑ´Ù¸é, ÀÌ´Â ¸Å¿ì Èûµç ÀÏÀÌ µÉ °ÍÀÌ´Ù. ƯÈ÷ ÇÁ·Î±×·¥ÀÇ Å©±â°¡ 10,000 ÁÙ ÀÌ»óÀÏ ¶§.
µû¶ó¼, ¾Æ·¡ÀÇ °ÍµéÀÌ C-style¿¡¼ÀÇ ¹®Á¦Á¡À» ±Øº¹Çϱâ À§ÇØ Á¦¾ÈµÇ¾ú´Ù.
¾Õ¿¡ ³ª¿À´Â °ÍÀÌ ´õ ÁÁÀº °ÍÀÌ´Ù.
Æ÷ÀÎÅÍ ´ë½Å ·¹ÆÛ·±½º¸¦ »ç¿ëÇÑ´Ù.
(ÀÌ HOWTO¿¡ ÁÖ¾îÁø) Java Çü½ÄÀÇ class¸¦ »ç¿ëÇϰųª, C++ Ç¥ÁضóÀ̺귯¸®ÀÇ string class¸¦ »ç¿ëÇÑ´Ù.
C++¿¡¼ÀÇ ¹®ÀÚ Æ÷ÀÎÅÍ(char *) »ç¿ëÀº String class¸¦ »ç¿ëÇÏÁö ¸øÇÒ ¶§·Î ±× »ç¿ëÀ» Á¦ÇÑÇÑ´Ù.
¸¸¾à C++¿¡¼ÀÇ ¹®ÀÚ Æ÷ÀÎÅÍ(char *)¸¦ »ç¿ëÇÏ°í ½ÍÁö ¾ÊÀ» ¶§´Â, extern ¿¬°è¸¦ ÀÌ¿ëÇÏ´Â (char *)¸¦.
"CÀÇ char *"¸¦ »ç¿ëÇϱâ À§Çؼ´Â, C ÇÁ·Î±×·¥À» ´Ù¸¥ ÆÄÀÏ¿¡ ³Ö°í,
¿¬°è¸í½Ã ¹® extern "C" ¸¦ ÀÌ¿ëÇÏ¿©
C++ ÇÁ·Î±×·¥¿¡ ¸µÅ©ÇÑ´Ù -
extern "C" {
#include <some_c_header.h>
}
extern "C" {
comp();
some_c_function();
}
extern "C" ´Â ¿¬°è ¸í½ÃÀ̰í, ¾ç Áß°ýÈ£·Î µÑ·¯½ÎÀÎ
ºí·Ï¾ÈÀÇ ¸ðµç ³»¿ëÀÌ C++ÀÌ ¾Æ´Ñ CÀÇ ¿¬°è ¹æ¹ýÀ» »ç¿ëÇÑ´Ù´Â ¸»ÀÌ´Ù.
'String Ŭ·¡½º'´Â ¸Þ¸ð¸® ÇÒ´ç°ú ÇØÁ¦¸¦ À§ÇØ »ý¼ºÀÚ¿Í
ÆÄ±«ÀÚ¸¦ ÀÌ¿ëÇϰí,
ltrim, substring µîµî°ú °°Àº
ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù.
¶ÇÇÑ °ü·ÃµÈ ¸¦ »ç¿ëÇÏ´Â C++ ÄÄÆÄÀÏ·¯¿¡¼ ã¾Æº¸¾Æ¶ó.
string Ŭ·¡½º´Â Ç¥ÁØ C++ ¶óÀ̺귯¸®ÀÇ ÀϺÎÀ̰í, ¿©·¯°¡Áö
¹®ÀÚ¿ °ü·Ã ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù.
C++ 'string Ŭ·¡½º' ¿Í 'String Ŭ·¡½º'
¶óÀ̺귯¸®°¡ ¸¹Àº ¹®ÀÚ¿ ÇÔ¼ö¸¦ Á¦°øÇϱ⠶§¹®¿¡, Á÷Á¢ ¹®ÀÚ¿ ÇÔ¼ö¸¦ ¾²±â À§ÇØ
¹®ÀÚ Æ÷ÀÎÅ͸¦ »ç¿ëÇÒ Çʿ伺ÀÌ °ÅÀÇ ¾ø´Ù.
¶ÇÇÑ, C++ ÇÁ·Î±×·¡¸Ó´Â Ç×»ó 'malloc'À̳ª 'free'´ë½Å 'new', 'delete'¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.
µÎ ¹®ÀÚ¿ Ŭ·¡½º´Â
char * ³ª char []°¡ ÇÒ ¼ö ÀÖ´Â ¸ðµç ÀÏÀ»
ÇÒ ¼ö ÀÖ´Ù.
±×¸®°í º¸ÅÂÁø ÁÁÀº Á¡Àº ¸Þ¸ð¸® ¹®Á¦³ª ¸Þ¸ð¸® ÇÒ´ç¿¡ ´ëÇØ ÀüÇô °ÆÁ¤ÇÒ Çʿ䰡 ¾ø´Ù´Â °ÍÀÌ´Ù.
ÃßõÇÒ¸¸ÇÑ C++ ÄÄÆÄÀÏ·¯
ISO¿Í ANSI¿¡ ÀÇÇØ äÅÃµÈ ÇöÀçÀÇ C++ Ç¥ÁØÀº 1997³â¿¡ óÀ½ ¿Ï¼ºµÇ¾ú´Ù.
¾ÆÁ÷ ¸ðµç ÄÄÆÄÀÏ·¯°¡ À̸¦ µû¸£°í ÀÖÁö ¾Ê°í, ¸ðµç Ư¡µéÀÌ ´Ù Áö¿øµÇÁö´Â
¾Ê´Â ´Ù´Â °ÍÀÌ´Ù. - Ç¥ÁØ¿¡ ¸Â´Â ÄÄÆÄÀÏ·¯¸¦ ¾²´Â °ÍÀº ¸Å¿ì Áß¿äÇÏ´Ù.
MS Windows 2000/NT/95/98/ME/XP¸¦ À§ÇÑ ÄÄÆÄÀÏ·¯
MS Windows´Â C++°³¹ß·Î ²Ï À¯¸íÇϱ⠶§¹®¿¡, ÀÌ ¹®¼¿¡ ÁÖ¾îÁø String class
¶óÀ̺귯°¡ Àß ÀÛµ¿Çϰí, Windows XP/2000/NT/95/98/ME µî ¸ðµç ¹öÀü¿¡¼ Àß
ÀÛµ¿ÇÑ´Ù.
MS Windows¸¦ À§ÇÑ C++ ÄÄÆÄÀÏ·¯ :
GNU BloodShed http://www.bloodshed.net/devcpp.html
Borland C++ compiler http://www.borland.com/bcppbuilder/freecompiler
Microsoft Visual C++ compiler http://msdn.microsoft.com/visualc
MSDOS C++ compiler http://www.delorie.com/djgpp
ÀÌ ¹®¼ÀÇ String Ŭ·¡½º´Â À§¿¡ ¾ð±ÞµÈ ¸ðµç ÄÄÆÄÀÏ·¯·Î Å×½ºÆ® µÇ¾ú°í,
MS Visual C++ v6.0, Borland C++ v5.2, Borland C++ v5.5.1, Bloodshed ÄÄÆÄÀÏ·¯¿¡¼
Àß µ¿ÀÛÇÑ´Ù.
UNIX¿Í ±âŸ UNIX-like ½Ã½ºÅÛµéÀÇ ÄÄÆÄÀÏ·¯
GNU ¼¼°è¿¡¼´Â GCC(GNU Compiler Collection)¸¦ »ç¿ëÇÏ´Â °ÍÀÌ °¡Àå ÁÁÀº ¼±ÅÃÀÌ´Ù.
GCC´Â ´ëºÎºÐÀÇ ¸®´ª½º ¹èÆ÷ÆÇ, FreeBSD, ±âŸ Unix Ŭ·Ðµé¿¡ µé¾îÀÖ´Ù.
GCC ȨÆäÀÌÁö´Â http://gcc.gnu.orgÀÌ´Ù.
ÃֽŹöÀüÀÇ GCC(3.0)Àº °¡Àå Ç¥ÁØÀ» Àß ÁؼöÇÑ ÄÄÆÄÀÏ·¯ Áß ÇϳªÀÌ´Ù.
¿©·¯°¡Áö ¹®ÀÚ¿°ü·Ã class
¹®ÀÚ¿ class´Â ÇÁ·Î±×·¡¹Ö¿¡¼ °¡Àå Áß¿äÇÑ °Íµé Áß ÇϳªÀ̰í, ¹®ÀÚ¿ Á¶Á¤À»
À§ÇØ ¸Å¿ì ¸¹ÀÌ ¾²ÀδÙ.
¹®ÀÚ¿ class´Â ¿©·¯°¡Áö°¡ ÀÖ°í, ¹°·Ð À̵éÀ» »ó¼Ó¹ÞÀ½À¸·Î½á ÀڽŸ¸ÀÇ
¹®ÀÚ¿ class¸¦ ¸¸µé ¼öµµ ÀÖ´Ù.
ÀÌ ¹®¼¿¡ ¾²¿©Áø ¹®ÀÚ¿ Ŭ·¡½º´Â
¸¦ º¸¾Æ¶ó.
Ç¥ÁØ C++ ¶óÀ̺귯¸® string class (ANSI/ISO string class http://www.msoe.edu/eecs/cese/resources/stl/string.htm ¿Í http://www.sgi.com/tech/stl/basic_string.html
QtÀÇ ¿ÜºÎ ¶óÀ̺귯¸®¿¡ ÀÖ´Â Qt String class http://doc.trolltech.com/qstring.html , mirror : http://www.cs.berkeley.edu/~dmartin/qt/qstring.html
À̵é Áß ¸¾¿¡ µå´Â °ÍÀÌ ¾ø´Ù¸é, ÀڽŸ¸ÀÇ ¹®ÀÚ¿ Ŭ·¡½º¸¦ ¸¸µé ¼öµµ ÀÖ´Ù.
À§¿¡ ¾ð±ÞµÈ Çϳª ȤÀº ¿©·¯ class¸¦ »ó¼Ó¹Þ¾Æ ¸¸µé ¼öµµ ÀÖ´Ù.
Multiple Inheritance - ÀڽŸ¸ÀÇ ¹®ÀÚ¿ class ¸¸µé±â
À§¿¡ ¸»ÇÑ °Í °°ÀÌ, Çϳª ȤÀº ¿©·¯ class¸¦ »ó¼Ó¹Þ¾Æ ÀڽŸ¸ÀÇ ¹®ÀÚ¿ class¸¦
¸¸µé ¼öµµ ÀÖ´Ù. ¿©±â¼´Â Ç¥ÁØ C++ ¶óÀ̺귯¸®ÀÇ string class¿Í ºÎ·Ï AÀÇ
String class ¸¦ »ó¼Ó¹ÞÀ½À¸·Î½á ´ÙÁß»ó¼ÓÀ» ÀÌ¿ëÇÑ ¹®ÀÚ¿ class¸¦ ¸¸µé¾î º¼
°ÍÀÌ´Ù.
¿ì¼± ¿¹Á¦ ÆÄÀÏ 'string_multi.h'¸¦ ¿¡¼ ´Ù¿î·Îµå ¹Þ¾Æ¶ó.
ÀÌ ÆÄÀÏÀº ´ÙÀ½°ú °°´Ù :
// ******************************************************************
// String class¿Í Ç¥ÁØ ¶óÀ̺귯¸®ÀÇ "string" class¸¦ »ó¼Ó¹ÞÀ½À¸·Î½á
// Á÷Á¢ ¹®ÀÚ¿ class¸¦ ¸¸µé¾îº¸´Â ¿¹½Ã¸¦ À§ÇÑ ÇÁ·Î±×·¥
// ******************************************************************
#ifndef __STRING_MULTI_H_ALDEV_
#define __STRING_MULTI_H_ALDEV_
#include <string>
#include "String.h"
#include "StringBuffer.h"
#ifdef NOT_MSWINDOWS
#else
using namespace std; // MS Visual C++ compiler Version 6.0 ¿¡¼ ÇÊ¿äÇÔ.
#endif
// Áß¿ä! : C++¿¡¼´Â »ý¼ºÀÚ, ÆÄ±«ÀÚ, º¹»ç ¿¬»êÀÚ°¡ °°ÀÌ »ó¼ÓµÇÁö ¾Ê´Â´Ù.
// µû¶ó¼ ¸¸¾à =, + µîÀÇ ¿¬»êÀÚ°¡ base class¿¡ Á¤ÀǵǾî ÀÖ°í, base
// classÀÇ »ý¼ºÀÚ¸¦ ÀÌ¿ëÇÑ´Ù¸é, ¹Ýµå½Ã °°Àº ¿ªÇÒÀ» ÇÏ´Â »ý¼ºÀÚ¸¦
// »ó¼Ó¹Þ´Â class¿¡µµ ¸¸µé¾îÁÖ¾î¾ß ÇÑ´Ù.
// ¾Æ·¡¿¡ ÁÖ¾îÁø mystring(), mystring(char [])¸¦ º¸¾Æ¶ó.
//
// ¶ÇÇÑ atmpstrÀÌ mystringÀ¸·Î ¼±¾ðµÇ¾ú´Ù°í ÇÒ ¶§, atmpstr + mstr
// °ú °°ÀÌ ¿¬»êÀÚ¸¦ ¾µ ¶§, ½ÇÁ¦·Î ºÒ¸®´Â °ÍÀº atmpstr.operator+(mstr)ÀÌ´Ù.
class mystring:public String, string
{
public:
mystring():String() {} // =, + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿äÇÏ´Ù
mystring(char bb[]):String(bb) {} // =, + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿äÇÏ´Ù
mystring(char bb[], int start, int slength):String(bb, start, slength) {}
mystring(int bb):String(bb) {} // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿äÇÏ´Ù
mystring(unsigned long bb):String(bb) {} // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿äÇÏ´Ù
mystring(long bb):String(bb) {} // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿äÇÏ´Ù
mystring(float bb):String(bb) {} // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿äÇÏ´Ù
mystring(double bb):String(bb) {} // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿äÇÏ´Ù
mystring(const String & rhs):String(rhs) {} // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿äÇÑ Copy Constructor
mystring(StringBuffer sb):String(sb) {} // Java¿ÍÀÇ È£È¯À» À§ÇØ
mystring(int bb, bool dummy):String(bb, dummy) {} // StringBuffer class¸¦ À§ÇØ
int mystraa; // mystringÀÇ ÃÖÀûÈ
private:
int mystrbb; // mystringÀÇ ÃÖÀûÈ
};
#endif // __STRING_MULTI_H_ALDEV_
String class ´Ù¿î¹Þ±â
¸ðµç ÇÁ·Î±×·¥°ú ¿¹Á¦´Â ÀÌ ¹®¼ÀÇ ºÎ·Ï¿¡ ÁÖ¾îÁø´Ù.
String class¿Í ¶óÀ̺귯¸®, ¿¹Á¦ ÇÁ·Î±×·¥À» ÇϳªÀÇ tar zip ¾ÐÃàÆÄÀÏ·Î
¹¾î³õÀº ¸µÅ©°¡ ´ÙÀ½°ú °°´Ù.
http://www.milkywaygalaxy.freeservers.com ·Î °¡¼
"Source code C++
Programming howto" (Milkyway Galaxy site) ¸¦ ´·¯¶ó.
¹Ì·¯ »çÀÌÆ®´Â ´ÙÀ½°ú °°´Ù -
angelfire,
geocities,
virtualave,
50megs,
theglobe,
NBCi,
Terrashare,
Fortunecity,
Freewebsites,
Tripod,
Spree,
Escalix,
Httpcity,
Freeservers.
¾î¶»°Ô ÀúÀÚÀÇ String class¸¦ ¹ÏÀ» ¼ö ÀÖ³ª?
Ȥ String class¸¦ ¹ÏÀ» ¼ö ¾øÀ» ¼öµµ ÀÖ´Ù.
À̸¦ ÇØ°áÇϱâ À§ÇØ, ÀúÀÚÀÇ String class¸¦ °ËÁõÇÒ °úÇÐÀûÀÎ ¹æ¹ýÀÌ ÀÖ´Ù.
Çö´ë ÄÄÇ»ÅÍ °øÇÐÀÚµéÀº ¼ÒÇÁÆ®¿þ¾î¸¦ °ËÁõÇϱâ À§ÇØ ¸Ó¸®°¡ ¾Æ´Ñ CPU¸¦ ¾´´Ù.
»ç¶÷ÀÇ ¸Ó¸®´Â ³Ê¹« ´À¸®±â ¶§¹®¿¡ Å×½ºÆ®¿Í °ËÁõÀ» À§Çؼ´Â ÄÄÇ»ÅÍÀÇ ÈûÀ»
ºô¸®´Â °ÍÀÌ ÁÁ´Ù.
ÇÁ·Î±×·¥
example_String.cpp
À¸·Î °¡¼ 'Source code for C++' ¸¦ ¼±ÅÃÇØ¶ó.
( ºÎ·Ï A ¿¡µµ ÁÖ¾îÁø´Ù.
) À§ ÇÁ·Î±×·¥Àº ¼ö¹é¸¸¹øÀÇ Å×½ºÆ®¸¦ ÀÚµ¿À¸·Î ÇÒ ¼ö ÀÖ´Â Å×½ºÆ® ¸ðµâÀ»
°®°í ÀÖ´Ù. String class¿¡ ÀÌ Å×½ºÆ®¸¦ ÇØº»´Ù¸é, String class°¡
°ß°íÇϰí
¿Ïº®ÇÑ ÇÁ·Î±×·¥ÀÓÀ» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù.
Á÷Á¢ 50000¹Ýº¹À¸·Î Å×½ºÆ® ÇØº¸¾Ò´õ´Ï
¿À·ù¾øÀÌ Àß µ¿ÀÛÇÏ¿´´Ù.
¶ÇÇÑ, ¾î¶°ÇÑ ¸Þ¸ð¸® ¸¯µµ ¹ß°ßÇÒ ¼ö ¾ø¾ú´Ù.
Å×½ºÆ®´Â ¸®´ª½º¿¡¼ /usr/bin/gtop, UNIX top ¸í·É¾î,
KDEStart->System->KDE System Guard
and KDEStart->System->Process management µîÀ» »ç¿ëÇÏ¿© cpu¿Í ¸Þ¸ð¸®¸¦
üũÇϸç ÀÌ·ç¾îÁ³´Ù.
³ª´Â ¹Ýº¹È½¼ö ¸¦ õ¸¸¹øÀ̳ª ±× ÀÌ»óÀ¸·Î ³õ°í Å×½ºÆ®
ÇØº¸±â¸¦ ÃßõÇÑ´Ù. ¹Ýº¹È½¼ö°¡ Ŭ¼ö·Ï ½Å·Ú¼ºÀº ´õ¿í ³ô¾ÆÁú °ÍÀÌ´Ù!!
Å×½ºÆ®¸¦ µ¹·Á³õ°í ¹äÀ» ¸ÔÀ¸·¯ ´Ù³à¿À¸é °á°ú¸¦ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù!!
String class »ç¿ëÇϱâ
ÀÌ String class´Â Ç¥ÁØ C++ ¶óÀ̺귯¸®ÀÇ string class¿Í ´Ù¸£´Ù´Âµ¥ ÁÖÀÇÇ϶ó.
ÀÌ Æ¯º°ÇÑ String class´Â Á÷Á¢ ¸¸µé¾îÁø °ÍÀ̰í, Java ÇÁ·Î±×·¡¸ÓµéÀÌ C++À»
½±°Ô »ç¿ëÇϵµ·Ï Çϱâ À§ÇØ ¸¸µé¾îÁ³´Ù. ¸¸¾à ´ç½ÅÀÌ C++°ú ´õ Àͼ÷ÇÏ´Ù¸é
Ç¥ÁØ C++ ¶óÀ̺귯¸®¿¡ Á¦°øµÇ´Â ÁøÂ¥ string class ¸¦ »ç¿ë ÇÏ´Â °ÍÀÌ ÁÁ´Ù.
String class¸¦ »ç¿ëÇϱâ À§ÇØ, ÀÇ
"example_String.cpp" ¿¹Á¦ ÇÁ·Î±×·¥°ú ÀÇ
String class¸¦ º¸¾Æ¶ó.
'String class' ´Â char¿Í char * ŸÀÔÀ» ¿Ïº®ÇÏ°Ô ´ë½ÅÇÒ
¼ö ÀÖ´Ù.
'String class'¸¦ char ó·³ »ç¿ëÇÒ ¼öµµ ÀÖ°í,
¿©·¯°¡Áö ´Ù¾çÇÑ ±â´Éµµ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
¿¡ ÁÖ¾îÁø makefile¿¡¼ ¸¸µé¾îÁö´Â 'libString.a'¸¦
¸µÅ©ÇؾßÇϰí, C++ ¶óÀ̺귯¸®°¡ À§Ä¡ÇÑ ¸ðµç °÷ÀÇ ¶óÀ̺귯¸®¸¦ /usr/lib ³ª /lib
µð·ºÅ丮¿¡ ¶óÀ̺귯¸®¸¦ º¹»çÇØ³Ö¾î¾ß ÇÑ´Ù.
'libString.a'¸¦ »ç¿ëÇϱâ À§Çؼ´Â, ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏÇ϶ó.
g++ example.cpp -lString
´ÙÀ½¿¡ ÁÖ¾îÁø ¿¹Á¦ Äڵ带 º¸¶ó.
String aa;
aa = "Creating an Universe is very easy, similar to creating a baby human.";
// ÇÁ·Î±×·¥¿¡¼ aa.val()À» 'char *' °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
for (unsigned long tmpii = 0; tmpii < aa.length(); tmpii++)
{
//fprintf(stdout, "aa.val()[%ld]=%c ", tmpii, aa.val()[tmpii]);
fprintf(stdout, "aa[%ld]=%c ", tmpii, aa[tmpii]);
}
// ½ÇÁ¦·Î 'char *'·Î »ç¿ëÇϸé..
for (char *tmpcc = aa.val(); *tmpcc != 0; tmpcc++)
{
fprintf(stdout, "aa.val()=%c ", *tmpcc);
}
¿¬»êÀÚ
'String class'
´Â ¾Æ·¡¿Í °°Àº ¿¬»êÀÚ¸¦ Á¦°øÇÑ´Ù :-
Equal to ==
Not equal to !=
Assignment =
Add to itself and Assignment +=
String concatenation or addition +
¿¬»êÀÚ¸¦ »ç¿ëÇÏ´Â ¿¹Á¦¸¦ º¸ÀÚ.
String aa;
String bb("Bill Clinton");
aa = "put some value string"; // assignment operator
aa += "add some more"; // Add to itself and assign operator
aa = "My name is" + " Alavoor Vasudevan "; // string cat operator
if (bb == "Bill Clinton") // boolean equal to operator
cout << "bb is equal to 'Bill Clinton' " << endl;
if (bb != "Al Gore") // boolean 'not equal' to operator
cout << "bb is not equal to 'Al Gore'" << endl;
ÇÔ¼ö
String class¿¡¼ Á¦°øµÇ´Â ÇÔ¼öµéÀº Java ÀÇ String class¿Í
°°Àº À̸§À» °®´Â´Ù.
ÇÔ¼ö À̸§°ú µ¿ÀÛÀº JavaÀÇ String class¿Í ¿ÏÀüÈ÷¶È°°´Ù.
StringBuffer class¿ª½Ã Á¦°øµÈ´Ù.
À̵éÀº Java¿Í C++°£ÀÇ Æ÷ÆÃÀ» ½±°Ô ÇÒ °ÍÀÌ´Ù (Àß¶ó³»±â & ºÙ¿©³Ö±â¿Í ÃÖ¼ÒÇÑÀÇ ÄÚµå Á¶Á¤
¸¸À» ÇÊ¿ä·Î ÇÒ °ÍÀÌ´Ù).
JavaÀÇ ÇÔ¼ö¿¡ µé¾îÀÖ´Â Äڵ带 C++ÀÇ ¸â¹öÇÔ¼ö·Î º¹»çÇϱ⸸ ÇÏ¸é µÉ °ÍÀ̰í,
ÃÖ¼ÒÇÑÀÇ º¯°æ¸¸À¸·Îµµ C++¿¡¼ Àß ÄÄÆÄÀÏ µÉ °ÍÀÌ´Ù.
¶Ç´Ù¸¥ ÀÌÁ¡Àº Java¿Í C++À» ¸ðµÎ »ç¿ëÇÏ´Â °³¹ßÀÚµéÀÌ µÑ °£ÀÇ ¹®¹ýÀ̳ª ÇÔ¼ö À̸§À»
µû·Îµû·Î ±â¾ïÇÒ Çʿ䰡 ¾ø¾îÁø´Ù´Â °ÍÀÌ´Ù.
¿¹¸¦µé¾î integer¸¦ ¹®ÀÚ¿·Î ¹Ù²Ù´Â °ÍÀ» º¸¸é,
String aa;
aa = 34; // '=' ¿¬»êÀÚ°¡ int¸¦ stringÀ¸·Î ¹Ù²Û´Ù.
cout << "The value of aa is : " << aa.val() << endl;
aa = 234.878; // '=' ¿¬»êÀÚ°¡ float¸¦ stringÀ¸·Î ¹Ù²Û´Ù.
cout << "The value of aa is : " << aa.val() << endl;
aa = 34 + 234.878;
cout << "The value of aa is : " << aa.val() << endl;
// Ãâ·ÂÀº '268.878'ÀÏ °ÍÀÌ´Ù.
// castingÀÌ ÇÊ¿äÇÏ´Ù.
aa = (String) 34 + " Can create infinite number of universes!! " + 234.878;
cout << "The value of aa is : " << aa.val() << endl;
// Ãâ·ÂÀº '34 Can create infinite number of universes!! 234.878'ÀÏ °ÍÀÌ´Ù.
String classÀÇ ÇÔ¼öÀ̸§¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº
¸¦ Âü°íÇØ¶ó. °°Àº String.hÆÄÀÏÀÌ ´ÙÀ½ ¼½¼Ç¿¡µµ
³ª¿Ã °ÍÀÌ´Ù.
String classÀÇ À̸§ ¹Ù²Ù±â
Case 1: ´Ü¼øÇÑ À̸§ ¹Ù²Ù±â
¸¸¾à String classÀÇ À̸§ÀÌ ¸¾¿¡ µéÁö ¾Ê´Â´Ù¸é, "typedef"
¸¦ À̸§À» ¹Ù²Ù±â À§ÇØ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
String.h¸¦ includeÇÏ´Â ¸ðµç ÆÄÀÏ¿¡ ´ÙÀ½ÀÇ ³»¿ëÀ» ³Ö¾î¶ó :
// StringÀ̶ó´Â À̸§ÀÌ ¸¾¿¡ µéÁö ¾Ê´Â´Ù¸é, ´ÙÀ½°ú °°ÀÌ ¹Ù²Ù¾î¶ó.
typedef String StringSomethingElseIwant;
// ÀÌÁ¦ ÄÚµå´Â ´ÙÀ½°ú °°ÀÌ µÉ °ÍÀÌ´Ù.
int main()
{
StringSomethingElseIwant aa_renstr;
aa_renstr = "I renamed the String Class using typedef";
// .....
}
example_String.cpp
¿¡ °¡¼ 'Source code for C++'À» ¼±ÅÃÇØ¶ó.
Case 2: À̸§ÀÌ °ãÄ¥ ¶§
´Ù¸¥ °°Àº À̸§À» °¡Áø class¿Í À̸§ÀÌ °ãÄ¡´Âµ¥, µÎ class¸¦ ¸ðµÎ »ç¿ëÇϰí
½Í´Ù¸é, ´ÙÀ½°ú °°Àº ¹æ¹ýÀ» ½á¶ó.
String.h¸¦ includeÇÏ´Â ¸ðµç ÆÄÀÏ¿¡ ´ÙÀ½ÀÇ ³»¿ëÀ» ³Ö¾î¶ó.
#define String String_somethingelse_which_I_want
#include "String.h"
#undef String
#include "ConflictingString.h" // À̰͵µ StringÀ̶õ classÀÌ´Ù.
// ÄÚµå ³»¿ë..
int main()
{
String_somethingelse_which_I_want aa;
String bb; // À̰ÍÀº °ãÄ¡´Â String classÀÌ´Ù.
aa = " some sample string";
bb = " another string abraka-dabraka";
.......
}
Àü󸮱Ⱑ ¸ðµç StringÀ» "String_somethingelse_which_I_want"
À¸·Î ¹Ù²Ü °ÍÀ̰í, StringÀÇ Á¤ÀǸ¦ ¾ø¾Ù °ÍÀÌ´Ù.
undef ´ÙÀ½ ºÎÅÍ´Â "String" class¸¦ Á¤ÀÇÇÏ´Â °ãÄ¡´Â string class header°¡ ¿À°Ô µÈ´Ù.
String.h ÆÄÀÏ
C++°ú Java´Â ¸¹Àº ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÁ§Æ®¿¡¼ °°ÀÌ ¾²ÀδÙ.
C++°ú Java¸¦ ¿Ô´Ù°¬´ÙÇÏ´Â ÇÁ·Î±×·¡¸Óµé¿¡°Ô´Â ÀÌ ¹®ÀÚ¿ class°¡ ¸Å¿ì À¯¿ëÇÒ °ÍÀÌ´Ù.
C++ (ȤÀº ´Ù¸¥ °´Ã¼ÁöÇâ ¾ð¾î)¿¡¼´Â, "class µ¥ÀÌÅͱ¸Á¶"(ȤÀº ÀÎÅÍÆäÀ̽º)
¸¸ ÀÐÀ¸¸é ±× class¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÎÅÍÆäÀ̽º¸¸ ÀÌÇØÇÏ¸é µÇÁö, ÀÎÅÍÆäÀ̽ºÀÇ
±¸Çö±îÁö´Â ¾Ë Çʿ䰡 ¾ø´Â °ÍÀÌ´Ù.
String classÀÇ °æ¿ì, String.h ÆÄÀÏ¿¡ ÀÖ´Â String class¸¸ Àаí ÀÌÇØÇÏ¸é µÈ´Ù.
String class¸¦ ¾²±â À§ÇØ ±¸Çö(String.cpp)À» ¸ðµÎ
ÀÐÀ» ÇÊ¿ä´Â ¾ø´Â °ÍÀÌ´Ù.
°´Ã¼ÁöÇâ classµéÀº ½Ã°£À» Àý¾àÇÏ°Ô ÇØÁÖ°í, ±¸ÇöÀÇ ³»¿ëÀ»
±³¹¦ÇÏ°Ô ¼û°ÜÁØ´Ù.
( °´Ã¼ÁöÇâÀÎ Java¿¡µµ ÀÌ¿Í °°Àº ¿ªÇÒÀ» ÇÏ¿© ±¸Çö ³»¿ëÀ» ¼û°ÜÁÖ´Â
'interface' ¶õ °ÍÀÌ ÀÖ´Ù. )
¾Æ·¡ÀÇ ³»¿ëÀº String.h ÆÄÀÏÀ̰í,
À» Âü°íÇØ¶ó.
//
// Author : Al Dev Email: alavoor[AT]yahoo.com
// string class³ª String class¸¦ ½á¶ó.
//
// ¸Þ¸ð¸® ¸¯À» ¸·±â À§ÇØ - ¹®ÀÚ º¯¼ö¸¦ °ü¸®Çϱâ À§ÇÑ ¹®ÀÚ class
// char[]³ª char *º¸´Ù´Â String class³ª string class¸¦ ½á¶ó.
//
#ifndef __STRING_H_ALDEV_
#define __STRING_H_ALDEV_
// ÇÁ·Î±×·¥ÀÌ Ä¿Áú ¼ö·Ï iostreamÀ» »ç¿ëÇÏÁö ¸»¾Æ¶ó.
#ifdef NOT_MSWINDOWS
#include <iostream>
#else
#include <iostream.h> // ÇÏÀ§È£È¯¼ºÀ» À§ÇØ. C++ Ç¥ÁØÀº .h°¡ ¾ø´Ù.
#endif // NOT_MSWINDOWS
#include <stdio.h> // File°ú sprintf()¸¦ À§ÇØ
//#include <list.h> // list
// MS Windows 95 VC++°ú Borland C++ ÄÄÆÄÀÏ·¯ÀÎ °æ¿ì -
// d:\program files\CBuilder\include\examples\stdlib\list.cpp ¿Í include\list.h
// À» º¸¶ó.
//#include <list> // for list
//using namespace std;
const short INITIAL_SIZE = 50;
const short NUMBER_LENGTH = 300;
const int MAX_ISTREAM_SIZE = 2048;
//class StringBuffer;
// ³ª´Â ÀÌ ¹®ÀÚ¿ class¸¦ Linux (Redhat 7.1)¿Í MS Windows Borland C++ v5.2 (win32)
// ¿¡¼ ÄÄÆÄÀÏ / Å×½ºÆ® ÇØº¸¾Ò´Ù.
// ¶ÇÇÑ, MS Visual C++ compiler¿¡¼µµ ÀÛµ¿ÇÒ °ÍÀÌ´Ù.
class String
{
public:
String();
String(const char bb[]); // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿ä
String(const char bb[], int start, int slength); // ¹®ÀÚµéÀÇ ºÎºÐÁýÇÕ
String(int bb); // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿ä
String(unsigned long bb); // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿ä
String(long bb); // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿ä
String(float bb); // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿ä
String(double bb); // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿ä
String(const String & rhs); // + ¿¬»êÀÚ¸¦ À§ÇØ ÇÊ¿äÇÑ copy constructor
//String(StringBuffer sb); // Java¿ÍÀÇ È£È¯¼ºÀ» À§ÇØ
// - ±×·¯³ª MS windows¿¡¼´Â
// ÄÄÆÄÀϵÇÁö ¾Ê°í, core dump¸¦ ÀÏÀ¸Å²´Ù.
String(int bb, bool dummy); // StringBuffer class¸¦ À§ÇØ ÇÊ¿ä
virtual ~String(); // virtual·Î ¼±¾ðÇÏ¿© »ó¼Ó¹ÞÀº classÀÇ ¼Ò¸êÀÚ°¡
// ºÒ¸®µµ·Ï ÇÑ´Ù.
char *val() {return sval;} // svalÀ» publicÀ¸·Î ÇÏ´Â °ÍÀº À§ÇèÇϹǷÎ
// JavaÀÇ StringÀ» Èä³»³½ ÇÔ¼öµé
unsigned long length();
char charAt(int where);
void getChars(int sourceStart, int sourceEnd,
char target[], int targetStart);
char* toCharArray();
char* getBytes();
bool equals(String str2); // == ¿¬»êÀÚ¸¦ ÂüÁ¶Ç϶ó
bool equals(char *str2); // == ¿¬»êÀÚ¸¦ ÂüÁ¶Ç϶ó
bool equalsIgnoreCase(String str2);
bool regionMatches(int startIndex, String str2,
int str2StartIndex, int numChars);
bool regionMatches(bool ignoreCase, int startIndex,
String str2, int str2StartIndex, int numChars);
String toUpperCase();
String toLowerCase();
bool startsWith(String str2);
bool startsWith(char *str2);
bool endsWith(String str2);
bool endsWith(char *str2);
int compareTo(String str2);
int compareTo(char *str2);
int compareToIgnoreCase(String str2);
int compareToIgnoreCase(char *str2);
int indexOf(char ch, int startIndex = 0);
int indexOf(char *str2, int startIndex = 0);
int indexOf(String str2, int startIndex = 0);
int lastIndexOf(char ch, int startIndex = 0);
int lastIndexOf(char *str2, int startIndex = 0);
int lastIndexOf(String str2, int startIndex = 0);
String substring(int startIndex, int endIndex = 0);
String replace(char original, char replacement);
String replace(char *original, char *replacement);
String trim(); // ¿À¹ö·Îµù µÈ trimÀ» ÂüÁ¶Ç϶ó.
String concat(String str2); // + ¿¬»êÀÚ¸¦ ÂüÁ¶
String concat(char *str2); // + ¿¬»êÀÚ¸¦ ÂüÁ¶
String concat(int bb);
String concat(unsigned long bb);
String concat(float bb);
String concat(double bb);
String reverse(); // ¿À¹ö·Îµù µÈ ´Ù¸¥ reverse()¸¦ ÂüÁ¶
String deleteCharAt(int loc);
String deleteStr(int startIndex, int endIndex); // JavaÀÇ "delete()"
String valueOf(char ch)
{char aa[2]; aa[0]=ch; aa[1]=0; return String(aa);}
String valueOf(char chars[]){ return String(chars);}
String valueOf(char chars[], int startIndex, int numChars);
String valueOf(bool tf)
{if (tf) return String("true"); else return String("false");}
String valueOf(int num){ return String(num);}
String valueOf(long num){ return String(num);}
String valueOf(float num) {return String(num);}
String valueOf(double num) {return String(num);}
// ÀÌ ÆÄÀÏÀÇ ¾Æ·¡¿¡ ÁÖ¾îÁø StringBuffer¸¦ Âü°íÇ϶ó.
// ---- ¿©±â±îÁö Java¸¦ Èä³»³½ ÇÔ¼öµé -----
//////////////////////////////////////////////////////
// Java¿¡´Â ¾ø´Â Ãß°¡ÀûÀÎ ÇÔ¼öµé
//////////////////////////////////////////////////////
String ltrim();
void ltrim(bool dummy); // Á÷Á¢ÀûÀ¸·Î object¸¦ º¯È½ÃŲ´Ù.
String rtrim();
void rtrim(bool dummy); // Á÷Á¢ÀûÀ¸·Î object¸¦ º¯È½ÃŲ´Ù.
// chopall Âü°í.
void chopall(char ch='\n'); // ¸Ç µÚÀÇ ch¸¦ ¾ø¾Ø´Ù. rtrim Âü°í.
void chop(); // ¸Ç µÚÀÇ ¹®ÀÚ¸¦ ¾ø¾Ø´Ù.
void roundf(float input_val, short precision);
void decompose_float(long *integral, long *fraction);
void roundd(double input_val, short precision);
void decompose_double(long *integral, long *fraction);
void explode(char *separator); // token()°ú ¿À¹ö·Îµù µÈ explode()ÂüÁ¶
String *explode(int & strcount, char separator = ' '); // token()ÂüÁ¶
void implode(char *glue);
void join(char *glue);
String repeat(char *input, unsigned int multiplier);
String tr(char *from, char *to); // characterµéÀ» ¹Ù²Û´Ù(translate).
String center(int padlength, char padchar = ' ');
String space(int number = 0, char padchar = ' ');
String xrange(char start, char end);
String compress(char *list = " ");
String left(int slength = 0, char padchar = ' ');
String right(int slength = 0, char padchar = ' ');
String overlay(char *newstr, int start = 0, int slength = 0, char padchar = ' ');
String at(char *regx); // regxÀÇ Ã¹¹øÂ° match
String before(char *regx); // regx ¾ÕÀÇ string
String after(char *regx); // regx µÚÀÇ string
String mid(int startIndex = 0, int length = 0);
bool isNull();
bool isInteger();
bool isInteger(int pos);
bool isNumeric();
bool isNumeric(int pos);
bool isEmpty(); // length() == 0 °ú °°Àº »óÅÂ
bool isUpperCase();
bool isUpperCase(int pos);
bool isLowerCase();
bool isLowerCase(int pos);
bool isWhiteSpace();
bool isWhiteSpace(int pos);
bool isBlackSpace();
bool isBlackSpace(int pos);
bool isAlpha();
bool isAlpha(int pos);
bool isAlphaNumeric();
bool isAlphaNumeric(int pos);
bool isPunct();
bool isPunct(int pos);
bool isPrintable();
bool isPrintable(int pos);
bool isHexDigit();
bool isHexDigit(int pos);
bool isCntrl();
bool isCntrl(int pos);
bool isGraph();
bool isGraph(int pos);
void clear();
int toInteger();
long parseLong();
double toDouble();
String token(char separator = ' '); // StringTokenizer¿Í explode()¸¦ ÂüÁ¶
String crypt(char *original, char *salt);
String getline(FILE *infp = stdin); // putline() ÂüÁ¶
//String getline(fstream *infp = stdin); // putline() ÂüÁ¶
void putline(FILE *outfp = stdout); // getline() ÂüÁ¶
//void putline(fstream *outfp = stdout); // getline() ÂüÁ¶
void swap(String aa, String bb); // aa¸¦ bb·Î ¹Ù²Û´Ù
String *sort(String aa[]); // StringÀÇ array¸¦ sortÇÑ´Ù
String sort(int startIndex = 0, int length = 0); // string ³»ÀÇ characterµéÀ» sort
int freq(char ch); // ch°¡ µé¾îÀִ Ƚ¼ö¸¦ ¼¾´Ù
void Format(const char *fmt, ...);
String replace (int startIndex, int endIndex, String str);
void substring(int startIndex, int endIndex, bool dummy); // object¸¦ Á÷Á¢ ¹Ù²Û´Ù
void reverse(bool dummy); // object¸¦ Á÷Á¢ ¹Ù²Û´Ù
String deleteCharAt(int loc, bool dummy); // object¸¦ Á÷Á¢ ¹Ù²Û´Ù
String deleteStr(int startIndex, int endIndex, bool dummy);
void trim(bool dummy); // object¸¦ Á÷Á¢ ¹Ù²Û´Ù
String insert(int index, String str2);
String insert(int index, String str2, bool dummy); // object¸¦ Á÷Á¢ ¹Ù²Û´Ù
String insert(int index, char ch);
String insert(int index, char ch, bool dummy); // object¸¦ Á÷Á¢ ¹Ù²Û´Ù
String insert(char *newstr, int start = 0, int length = 0, char padchar = ' ');
String dump(); // od -c ¿Í °°ÀÌ stringÀ» dumpÇÑ´Ù.
// JavaÀÇ StringBuffer¸¦ À§ÇØ ÇÊ¿äÇÑ °Íµé
void ensureCapacity(int capacity);
void setLength(int len);
void setCharAt(int where, char ch); // charAt(), getCharAt() Âü°í
// JavaÀÇ Integer class, Long, Double class¸¦ À§ÇØ ÇÊ¿ä
int parseInt(String ss) {return ss.toInteger();}
int parseInt(char *ss)
{String tmpstr(ss); return tmpstr.toInteger();}
long parseLong(String ss) {return ss.parseLong();}
long parseLong(char *ss)
{String tmpstr(ss); return tmpstr.parseLong();}
float floatValue() {return (float) toDouble(); }
double doubleValue() {return toDouble(); }
char * number2string(int bb); // String(int) Âü°í
char * number2string(long bb); // String(long) Âü°í
char * number2string(unsigned long bb); // String(long) Âü°í
char * number2string(double bb); // String(double) Âü°í
///////////////////////////////////////////////
// °ãÄ¡´Â ÇÔ¼ö À̸§µé
///////////////////////////////////////////////
// char * c_str() // val() À» ´ë½Å»ç¿ë
// bool find(); // regionMatches() ¸¦ ´ë½Å»ç¿ë
// bool search(); // regionMatches() ¸¦ ´ë½Å»ç¿ë
// bool matches(); // regionMatches() ¸¦ ´ë½Å»ç¿ë
// int rindex(String str2, int startIndex = 0); lastIndexOf() À» ´ë½Å»ç¿ë
// String blanks(int slength); // repeat() ¸¦ ´ë½Å»ç¿ë
// String append(String str2); // concat() À̳ª + operator À» ´ë½Å»ç¿ë
// String prepend(String str2); // + operatorÀ» ´ë½Å»ç¿ë append()Âü°í
// String split(char separator = ' '); // token(), explode() ³ª StringTokenizer class ¸¦ ´ë½Å»ç¿ë
bool contains(char *str2, int startIndex = 0); // indexOf() ¸¦ ´ë½Å»ç¿ë
// void empty(); is_empty() ¸¦ ´ë½Å»ç¿ë
// void vacuum(); clear() ¸¦ ´ë½Å»ç¿ë
// void erase(); clear() ¸¦ ´ë½Å»ç¿ë
// void zero(); clear() ¸¦ ´ë½Å»ç¿ë
// bool is_float(); is_numeric(); À» ´ë½Å»ç¿ë
// bool is_decimal(); is_numeric(); À» ´ë½Å»ç¿ë
// bool is_Digit(); is_numeric(); À» ´ë½Å»ç¿ë
// float float_value(); toDouble(); À» ´ë½Å»ç¿ë
// float tofloat(); toDouble(); À» ´ë½Å»ç¿ë
// double double_value(); toDouble(); À» ´ë½Å»ç¿ë
// double numeric_value(); toDouble(); À» ´ë½Å»ç¿ë
// int int_value(); toInteger() ¸¦ ´ë½Å»ç¿ë
// int tonumber(); toInteger() ¸¦ ´ë½Å»ç¿ë
// String get(); substring() À̳ª val() À» ´ë½Å »ç¿ë. ±×·¯³ª Java ½ºÅ¸ÀÏÀÇ substringÀÌ ´õ ÁÁ´Ù
// String getFrom(); substring() À̳ª val() À» ´ë½Å »ç¿ë. ±×·¯³ª Java ½ºÅ¸ÀÏÀÇ substringÀÌ ´õ ÁÁ´Ù
// String head(int len); substring(0, len) À» ´ë½Å»ç¿ë
// String tail(int len); substring(length()-len, length()) ¸¦ ´ë½Å»ç¿ë
// String cut(); deleteCharAt() À̳ª deleteStr() À» ´ë½Å»ç¿ë
// String cutFrom(); deleteCharAt() À̳ª deleteStr() À» ´ë½Å»ç¿ë
// String paste(); insert() ¸¦ ´ë½Å»ç¿ë
// String fill(); replace() ¸¦ ´ë½Å»ç¿ë
// char firstChar(); // substring(0, 1); À» ´ë½Å»ç¿ë
// char lastChar(); // substring(length()-1, length()); ¸¦ ´ë½Å»ç¿ë
// String findNext(); token(), explode() À̳ª StringTokenizer class ¸¦ ´ë½Å»ç¿ë
// begin(); iterator. operator [ii]¸¦ ´ë½Å»ç¿ë
// end(); iterator. operator [ii]¸¦ ´ë½Å»ç¿ë
// copy(); assignment = ¿¬»ê´Ù¸¦ ´ë½Å »ç¿ë, String aa = bb;
// clone(); assignment = ¿¬»êÀÚ¸¦ ´ë½Å »ç¿ë, String aa = bb;
// void putCharAt(int where, char ch); setCharAt() À» ´ë½Å»ç¿ë
// void replaceCharAt(int where, char ch); setCharAt() À» ´ë½Å»ç¿ë
// char getCharAt(int where); CharAt() À» ´ë½Å»ç¿ë
// void parseArgs(int where, char ch); StringTokensizer class, token() À̳ª explode() ¸¦ ´ë½Å»ç¿ë
// void truncate(); trim(), rtrim(), chop() À̳ª chopall() À» ´ë½Å»ç¿ë
// ¼ýÀÚ¸¦ stringÀ¸·Î º¯È¯ : notostring(), int2str, long2strÀº number2string()À» »ç¿ë
// ¿¬»êÀÚµé...
String operator+ (const String & rhs);
friend String operator+ (const String & lhs, const String & rhs);
String& operator+= (const String & rhs); // ·¹ÆÛ·±½º¸¦ ÀÌ¿ëÇÏ¸é ´õ ºü¸¦ °ÍÀÌ´Ù.
String& operator= (const String & rhs); // ·¹ÆÛ·±½º¸¦ ÀÌ¿ëÇÏ¸é ´õ ºü¸¦ °ÍÀÌ´Ù.
bool operator== (const String & rhs); // ·¹ÆÛ·±½º¸¦ ÀÌ¿ëÇÏ¸é ´õ ºü¸¦ °ÍÀÌ´Ù.
bool operator== (const char *rhs);
bool operator!= (const String & rhs);
bool operator!= (const char *rhs);
char operator [] (unsigned long Index) const;
char& operator [] (unsigned long Index);
friend ostream & operator<< (ostream & Out, const String & str2);
friend istream & operator>> (istream & In, String & str2);
bool String::operator< (const char *rhs) const; // map & vector ¸¦ À§ÇÑ À¯¿ëÇÑ method
bool String::operator< (const String & rhs) const; // map & vector ¸¦ À§ÇÑ À¯¿ëÇÑ method
//do later: static list<String> explodeH; // list head
protected:
char *sval; // svalÀ» publicÀ¸·Î ÇÏ´Â °ÍÀº À§ÇèÇÏ´Ù.
void verifyIndex(unsigned long index) const; // Win32¿¡¼ÀÇ warning¶§¹®¿¡ inlineÀÌ ¾Æ´Ï´Ù.
void verifyIndex(unsigned long index, char *aa) const;// Win32¿¡¼ÀÇ warning¶§¹®¿¡ inlineÀÌ ¾Æ´Ï´Ù.
void _str_cat(char bb[]);
void _str_cat(int bb);
void _str_cat(unsigned long bb);
void _str_cat(float bb);
void _str_cpy(char bb[]);
void _str_cpy(int bb); // itoa
void _str_cpy(unsigned long bb);
void _str_cpy(float bb); // itof
private:
// Note: ¸ðµç private º¯¼ö¿Í ÇÔ¼ö´Â _ (¹ØÁÙ)·Î ½ÃÀÛÇÑ´Ù.
//static String *_global_String; // add ¿¬»ê¿¡¼ ÇÊ¿ä
//inline void _free_glob(String **aa);
bool _equalto(const String & rhs, bool type = false);
bool _equalto(const char *rhs, bool type = false);
String *_pString; // ³»ºÎ¿¡¼ »ç¿ëÇÏ´Â Àӽà Æ÷ÀÎÅÍ
char *_pNumber2String; // ³»ºÎ¿¡¼ »ç¿ëÇÏ´Â Àӽà Æ÷ÀÎÅÍ
inline void _allocpString();
inline void _allocpNumber2String();
inline void Common2AllCstrs();
inline void _reverse();
inline void _deleteCharAt(int loc);
inline void _deleteStr(int startIndex, int endIndex);
inline void _trim();
inline void _ltrim();
inline void _rtrim();
inline void _substring(int startIndex, int endIndex);
void _roundno(double input_dbl, float input_flt, short precision, bool type);
};
// Àü¿ªº¯¼ö´Â String.cpp ¿¡¼ Á¤ÀǵȴÙ
#endif // __STRING_H_ALDEV_
StringBuffer.h
C++ °ú Java´Â ¸¹Àº ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÁ§Æ®¿¡¼ µ¿½Ã¿¡ ¾²ÀδÙ.
C++°ú Java¸¦ ¿Ô´Ù°¬´ÙÇÏ´Â ÇÁ·Î±×·¡¸Ó¿¡°Ô ÀÌ stringbuffer class´Â ¸Å¿ì À¯¿ëÇÒ °ÍÀÌ´Ù.
//
// Author : Al Dev Email: alavoor[AT]yahoo.com
//
#ifndef __STRINGBUFFER_H_ALDEV_
#define __STRINGBUFFER_H_ALDEV_
// JavaÀÇ StringBuffer ¸¦ ¸ð¹æÇÑ °Í
// ÀÌ class´Â JavaÀÇ code¸¦ ÃÖ¼ÒÇÑÀÇ ¼öÁ¤¸¸À¸·Îµµ
// C++¿¡¼ µ¿ÀÛÇϵµ·Ï Çϱâ À§ÇØ ¸¸µé¾îÁ³´Ù.
// Note: C++·Î ÄÚµùÇÏ´Â µ¿¾ÈÀº ÀÌ StringBuffer
// class¸¦ *¾²Áö ¸»¾Æ¶ó*.
// ÀÌ class´Â ¿ÀÁ÷ Java Äڵ带 cut/pasteÇÏ´Â °æ¿ì¸¦
// À§Çؼ ¾²¿©Áø °ÍÀÌ´Ù.
class StringBuffer: public String
{
public:
StringBuffer();
~StringBuffer();
StringBuffer(char *aa);
StringBuffer(int size);
StringBuffer(String str);
int capacity();
StringBuffer append(String str2);
// operator + ÂüÁ¶
//{ *this += str2; return *this;} // ÀÌ code´Â core dump¸¦ ÀÏÀ¸Å²´Ù
StringBuffer append(char *str2);
StringBuffer append(int bb);
StringBuffer append(unsigned long bb) ;
StringBuffer append(float bb) ;
StringBuffer append(double bb) ;
StringBuffer insert(int index, String str2);
StringBuffer insert(int index, char ch);
StringBuffer reverse();
// JavaÀÇ "delete()"¿¡ ÇØ´ç. (delete´Â C++ÀÇ keywordÀ̹ǷΠ»ç¿ëÇÏÁö ¸øÇÑ´Ù)
StringBuffer deleteStr(int startIndex, int endIndex);
StringBuffer deleteCharAt(int loc);
StringBuffer substring(int startIndex, int endIndex = 0);
void assign(char *str);
private:
StringBuffer *_pStringBuffer;
inline void allocpStringBuffer();
inline void Common2AllCstrs();
};
#endif // __STRINGBUFFER_H_ALDEV_
StringTokenizer.h
C++ °ú Java´Â ¸¹Àº ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÁ§Æ®¿¡¼ µ¿½Ã¿¡ ¾²ÀδÙ.
C++°ú Java¸¦ ¿Ô´Ù°¬´ÙÇÏ´Â ÇÁ·Î±×·¡¸Ó¿¡°Ô ÀÌ stringtokenizer class´Â ¸Å¿ì À¯¿ëÇÒ °ÍÀÌ´Ù.
//
// Author : Al Dev Email: alavoor[AT]yahoo.com
//
#ifndef __STRINGTOKENIZER_H_ALDEV_
#define __STRINGTOKENIZER_H_ALDEV_
// JavaÀÇ StringBuffer ¸¦ ¸ð¹æÇÑ °Í
// JavaÀÇ Äڵ带 C++¿¡¼ ȤÀº ±× ¹Ý´ë·Î ÄÄÆÄÀÏÇÏ´Â °ÍÀÌ
// °¡´ÉÇÏ°Ô ¸¸µé¾îÁ³´Ù.
class StringTokenizer: public String
{
public:
StringTokenizer(String str);
StringTokenizer(String str, String delimiters);
StringTokenizer(String str, String delimiters, bool delimAsToken);
~StringTokenizer();
int countTokens();
bool hasMoreElements();
bool hasMoreTokens();
String nextElement(); // Java¿¡¼´Â "Object"typeÀ» returnÇÑ´Ù.
String nextToken();
String nextToken(String delimiters);
private:
int CurrentPosition; // ÇöÀç string¿¡¼ÀÇ index
int TotalTokens;
int RemainingTokens;
char * ListOfDl; // delimiters(±¸ºÐÀÚ)µéÀÇ list
char * WorkStr; // Àӽà ÀÛ¾÷ string
char * OrigStr; // Áö³ª¿Â original string
bool DlFlag; // ±¸ºÐÀÚÀÎÁö¸¦ ³ªÅ¸³»´Â flag
inline void vPrepWorkStr(char *delimiters = NULL);
};
#endif // __STRINGTOKENIZER_H_ALDEV_
Ç¥ÁØ C++ ¶óÀ̺귯¸® string class
À§¿¡ ¾ð±ÞµÈ String class (S°¡ ´ë¹®ÀÚÀÎ °Í¿¡ ÁÖÀÇ!)´Â Java¸¦ »ç¿ëÇÏ´Â »ç¶÷µéÀ»
À§ÇÑ °ÍÀÎ ¹Ý¸é, Ç¥ÁØ C++ ¶óÀ̺귯¸®¿¡¼ Á¦°øµÇ´Â "ÁøÂ¥" string class¸¦ ÁÖ¸ñÇÒ
Çʿ䰡 ÀÖ´Ù.
string class´Â C¿¡¼ÀÇ °¡Àå Å« ¹®Á¦Á¡ Áß ÇϳªÀÎ ¹®ÀÚ¹è¿ÀÇ ´ÜÁ¡À» ±Øº¹Çϱâ À§ÇØ
¸¸µé¾îÁ³´Ù. ¹®ÀÚ¹è¿ÀÌ ¹«Ã´ ºü¸£±ä ÇÏÁö¸¸, ¸¹Àº ´ÜÁ¡À» °®°í ÀÖ´Ù.
¹®ÀÚ¹è¿Àº ¸¹Àº ¹ö±×ÀÇ ¿øÀÎÀ̰í, À̸¦ parsingÇÏ´Â ÀÏÀº ±²ÀåÈ÷ ±ÍÂúÀº ÀÏÀÌ´Ù.
string class´Â ¹®ÀÚ¿À» ÆÄ½ÌÇϰí, Á¶Á¤Çϴµ¥ ÇÊ¿äÇÑ ÁÁÀº ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇϰí,
STL°úµµ ȣȯ°¡´ÉÇÏ´Ù. Áï, ¸ðµç STLÀÇ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
½ÇÁ¦·Î ¹®ÀÚ¿Àº vector<char>
( ¹®ÀÚµéÀ» À§ÇÑ container ȤÀº Áøº¸µÈ ¹®ÀÚ¹è¿ )
·Î Ãë±ÞµÉ ¼ö ÀÖ´Ù.
´ÙÀ½ÀÇ »çÀÌÆ®¿¡¼ Âü°íÇÒ¸¸ÇÑ °ÍµéÀ» ¾òÀ» ¼ö ÀÖ´Ù:
SGI STL ±âÃÊ_string reference: http://www.sgi.com/tech/stl/basic_string.html.
¿¹Á¦·Î »ìÆìº¸´Â string
stringÀ» ¸¸µå´Â °ÍÀº ½±´Ù.
Creating a string is easy:
#include <string>
#include <iostream>
using namespace std;
int main()
{
string str("Hello World!"); // ȤÀº string str = "Hello World!";
cout << str << endl;
}
ÀÌ ÄÚµå´Â "str'¶õ stringÀ» ¸¸µé°í, "Hello
World!' ¶ó´Â ³»¿ëÀ» ³ÖÀ» °ÍÀÌ´Ù.
±×¸®°í coutÀ» »ç¿ëÇÏ¿© Ç¥ÁØÃâ·Â(stdout)À¸·Î Ãâ·ÂÇÒ °ÍÀÌ´Ù.
(ÀÌÁ¦ºÎÅÍ ¸ðµç Çì´õ¿Í namespace °ü·ÃºÎºÐÀº »ý·«ÇÒ °ÍÀÌ´Ù.)
¹®ÀÚ¿ÀÇ ºÎºÐÀ» ±¸ÇÏ´Â °Í ¿ª½Ã ½±´Ù :
string str("Hello Universe!");
string start = str.substr(0, 5);
string end = str.substr(5);
¿©±â¼´Â ù 6±ÛÀÚ¸¦ string "start"¿¡, ³ª¸ÓÁö´Â
"end"¿¡ µé¾î°¥ °ÍÀÌ´Ù.
¹®ÀÚ¿ÀÇ ±æÀ̸¦ ¾ò±â À§Çؼ´Â, ¾Æ·¡¿Í °°ÀÌ ÇÏ¸é µÈ´Ù.
string str("How long is this string?");
cout << "Length of string is: " << str.size() << endl;
ȤÀº ÀÌ¿Í Á¤È®È÷ ¶È°°Àº ¿ªÇÒÀ» ÇÏ´Â length() ¸¦ ½áµµ µÈ´Ù.
¹®ÀÚ¿À» ã±â
¹®ÀÚ¿À» ã´Â °ÍÀº ¹®Àڹ迺¸´Ù ÈξÀ ½±´Ù. string class´Â ¹®ÀÚ¿À» ã´Âµ¥
È¿À²ÀûÀÎ ¸â¹ö ÇÔ¼öµéÀ» Á¦°øÇÑ´Ù.
¸ðµç ¸â¹öÇÔ¼ö´Â string::size_type À» returnÇÑ´Ù.
¹®ÀÚ¿ °Ë»ö ¸â¹ö ÇÔ¼ö
¸â¹ö ÇÔ¼ö
ÀÛµ¿
find()
ÁÖ¾îÁø ºÎºÐ¹®ÀÚ¿ÀÌ Ã³À½À¸·Î ³ªÅ¸³ª´Â °÷À» ã´Â´Ù
find_first_of()
find()¿Í °°À¸³ª ÁÖ¾îÁø ¹®ÀÚ°¡ óÀ½À¸·Î ³ªÅ¸³ª´Â À§Ä¡¸¦ ã´Â´Ù
find_last_of()
find first of()¿Í °°À¸³ª, ÁÖ¾îÁø ¹®ÀÚ°¡ ¸¶Áö¸·À¸·Î ³ªÅ¸³ª´Â À§Ä¡¸¦ ã´Â´Ù
find_first_not_of()
find first of() °ú °°À¸³ª ÁÖ¾îÁø ¹®ÀÚ°¡ ¾Æ´Ñ ù ¹®ÀÚ°¡ óÀ½À¸·Î
³ªÅ¸³ª´Â À§Ä¡¸¦ ã´Â´Ù
find_last_not_of()
find last of() °ú °°À¸³ª ÁÖ¾îÁø ¹®ÀÚ°¡ ¾Æ´Ñ ¹®ÀÚ¸¦ ã´Â´Ù.
rfind()
find()¿Í °°À¸³ª, ã´Â ¹æÇâÀÌ ¹Ý´ëÀÌ´Ù. (µÚÂʺÎÅÍ Ã£´Â´Ù)
°¡Àå ÈçÇÑ »óȲÀº ¹®ÀÚ¿À» ã´Â °ÍÀ̰í, ÀÌ´Â
find() ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é µÈ´Ù.
string str("Hello, can you find Ben?");
string::size_type position = str.find("Ben");
cout << "First occurence of Ben was found at: " << position << endl;
ÀÌ ÄÚµå´Â 'Ben'¿¡ ´ëÇØ ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏ´Â °Ë»öÀ» Çϰí,
½ÃÀÛÀ§Ä¡¸¦ 'position'¿¡ string::size_type ŸÀÔÀ¸·Î ³Ö´Â´Ù.
¸®ÅÏÇÏ´Â °ªÀÌ int°¡ ¾Æ´Ï¶ó Ưº°È÷ °í¾ÈµÈ string::size_type ŸÀÔÀ̶ó´Âµ¥ ÁÖÀÇÇ϶ó.
find_first_of()
ÇÔ¼ö´Â ½ÇÁ¦ÀûÀÎ ¿¹°¡ ÇÊ¿äÇÒ °ÍÀÌ´Ù.
¾Æ·¡¿Í °°Àº »óȲÀ» º¸ÀÚ.
string s = "C++ is an impressive language.";
string::size_type pos = s.find_first_of(" .");
while (pos != string::npos) {
cout << "Found space or dot at: " << pos << endl;
pos = s.find_first_of(" .", pos + 1);
}
find_first_of()ÇÔ¼ö¸¦ ¾²¸é,
¿ì¸®´Â ù¹øÂ° ÀÎÀÚÀÇ ¸ðµç ¹®ÀÚ¸¦ ã°Ô µÇ°í,
µû¶ó¼ ¿©±â¼´Â ½ºÆäÀ̽º(' ') ȤÀº Á¡('.')À» ã°Ô µÈ´Ù.
ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇØ¼ ¾î¶»°Ô Ãâ·ÂµÇ´ÂÁö º¸¾Æ¶ó.
string tokenizer
¹®ÀÚ¿À» °¡Áö°í ÀÚÁÖ ÇϰԵǴ ÀÛ¾÷ Áß Çϳª´Â, ¾î¶² ±¸ºÐÀÚ¸¦ °¡Áö°í ÅäÅ«µé·Î
³ª´©´Â °ÍÀÌ´Ù (tokenize). tokenizer´Â ¹®ÀÚ¿À» find()¸¦ °è¼Ó ºÎ¸£´Â ÀÏ ¾øÀÌ
½±°Ô Á¶±×¸¸ Á¶°¢µé·Î Âɰ¶ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù. C¿¡¼´Â, ¾Æ¸¶µµ ¹®ÀÚ ¹è¿¿¡ ´ëÇØ
strtok() ¶õ ÇÔ¼ö¸¦ ½èÀ» °ÍÀÌÁö¸¸,
¹®ÀÚ¿¿¡ ´ëÇØ¼´Â ÀÌ·¯ÇÑ ÇÔ¼ö°¡ ¾ø´Ù. µû¶ó¼ Á÷Á¢ ÀÌ·± ÇÔ¼ö¸¦ ¸¸µé¾î¾ß °ÚÁö¸¸,
¸î°¡Áö ÇØ°áÃ¥ÀÌ ÀÖ´Ù.
The advanced tokenizer:
void Tokenize(const string& str,
vector<string>& tokens,
const string& delimiters = " ")
{
// ¸Ç ù ±ÛÀÚ°¡ ±¸ºÐÀÚÀÎ °æ¿ì ¹«½Ã
string::size_type lastPos = str.find_first_not_of(delimiters, 0);
// ±¸ºÐÀÚ°¡ ¾Æ´Ñ ù ±ÛÀÚ¸¦ ã´Â´Ù
string::size_type pos = str.find_first_of(delimiters, lastPos);
while (string::npos != pos || string::npos != lastPos)
{
// tokenÀ» ã¾ÒÀ¸´Ï vector¿¡ Ãß°¡ÇÑ´Ù
tokens.push_back(str.substr(lastPos, pos - lastPos));
// ±¸ºÐÀÚ¸¦ ¶Ù¾î³Ñ´Â´Ù. "not_of"¿¡ ÁÖÀÇÇ϶ó
lastPos = str.find_first_not_of(delimiters, pos);
// ´ÙÀ½ ±¸ºÐÀÚ°¡ ¾Æ´Ñ ±ÛÀÚ¸¦ ã´Â´Ù
pos = str.find_first_of(delimiters, lastPos);
}
}
tokenizer´Â ´ÙÀ½°ú °°ÀÌ ¾²ÀÏ ¼ö ÀÖ´Ù.
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<string> tokens;
string str("Split me up! Word1 Word2 Word3.");
Tokenize(str, tokens);
copy(tokens.begin(), tokens.end(), ostream_iterator<string>(cout, ", "));
}
À§ÀÇ ÄÚµå´Â Tokenize ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ¿¹·Î¼, ù¹øÂ° ÀÎÀÚÀÎ
str¸¦ Âɰµ´Ù. ±×¸®°í ¿ì¸®°¡ ¼¼ ¹øÂ° ÀÎÀÚ¸¦ ÁÖÁö
¾Ê¾Ò±â ¶§¹®¿¡ µðÆúÆ®·Î ¼³Á¤µÈ " "(spacebar)¸¦ ±¸ºÐÀÚ·Î »ç¿ëÇÑ´Ù.
±×¸®°í ¸ðµç element´Â tokens º¤ÅÍ¿¡ µé¾î°¡°Ô µÉ °ÍÀÌ´Ù.
¸¶Áö¸·À¸·Î Ç¥ÁØ Ãâ·Â¿¡ º¤ÅÍ Àüü¸¦ copy()ÇÔÀ¸·Î½á º¤ÅÍÀÇ ³»¿ëÀ» ȸéÀ¸·Î
º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
¶Ç´Ù¸¥ Á¢±Ù ¹æ¹ýÀº stringstreamÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. C++¿¡¼ streamÀº Ư¼öÇÑ
±â´ÉÀÌ Çϳª Àִµ¥, ÀÌ´Â °ø¹é(whitespace)¸¦ ¸¸³¯ ¶§±îÁö Àб⸦ °è¼ÓÇÑ´Ù´Â °ÍÀÌ´Ù.
µû¶ó¼ ¾Æ·¡ÀÇ ÄÚµå´Â °ø¹éÀ» ±âÁØÀ¸·Î ¹®ÀÚ¿À» ³ª´©°íÀÚ ÇÒ ¶§ Àß µ¿ÀÛÇÒ °ÍÀÌ´Ù.
#include <vector>
#include <string>
#include <sstream>
using namespace std;
int main()
{
string str("Split me by whitespaces");
string buf; // ¹öÆÛ string
stringstream ss(str); // stringÀ» stream¿¡ ³Ö´Â´Ù
vector<string> tokens; // wordµéÀ» ³ÖÀ» vector
while (ss >> buf)
tokens.push_back(buf);
}
ÀÌÁ¦ stringstreamÀº Ãâ·Â ¿¬»êÀÚ(>>)¸¦ »ç¿ë ÇÏ¿© ¹®ÀÚ¿À» buf
¿¡ °ø¹éÀ» ¸¸³¯ ¶§¸¶´Ù ³Ö´Â´Ù.
buf´Â À̸¦ Â÷·Ê´ë·Î º¤ÅÍ¿¡ push_back() ÇÑ´Ù.
±×¸®°í ÀÌÁ¦ tokens º¤ÅÍ´Â str ¿¡
µé¾îÀÖ´Â ¸ðµç ´Ü¾î¸¦ °®°Ô µÈ´Ù.
File class
C++ °ú Java´Â ¸¹Àº ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÁ§Æ®¿¡¼ µ¿½Ã¿¡ ¾²ÀδÙ.
C++°ú Java¸¦ ¿Ô´Ù°¬´ÙÇÏ´Â ÇÁ·Î±×·¡¸Ó¿¡°Ô ÀÌ File class´Â ¸Å¿ì À¯¿ëÇÒ °ÍÀÌ´Ù.
¿î¿µÃ¼Á¦ÀÇ ÆÄÀÏÀ» °ü¸®ÇÒ ¶§, File class°¡ ÇÊ¿äÇÒ °ÍÀÌ´Ù. ÀÌ class´Â
JavaÀÇ File class¸¦ ¸ð¹æÇÑ °ÍÀ¸·Î, C++ ÇÁ·Î±×·¡¹Ö¿¡¼ ¸Å¿ì À¯¿ëÇÒ °ÍÀÌ´Ù.
C++¿¡¼ ÀÌ class¸¦ »ç¿ëÇϸé, ÆÄÀÏÀÌ Á¸ÀçÇÏ´ÂÁö(exists()),
µð·ºÅ丮°¡ Á¸ÀçÇÏ´ÂÁö(exists()),
ÆÄÀÏÀÇ ±æÀÌ´Â ¾î¶²Áö(length()) µîÀ» ¾Ë ¼ö ÀÖ´Ù.
ÀÌ class°¡ Ç¥ÁØ C++ ¶óÀ̺귯¸®¿¡´Â ¾ø´Â ÁÁÀº ±â´ÉµéÀ» °®°í ÀÖ´Ù´Â µ¥ ÁÖ¸ñÇØ¶ó.
±×·¯³ª ¿©·¯°¡Áö ´Ù¸¥ µ¿ÀÛÀ» ÇØÁÖ¾î¾ß ÇÏ´Â fstreams(iostreams)°ú Çò°¥¸®Áö´Â ¸»¾Æ¶ó.
C++ File class ´Â ´ÙÀ½¿¡¼ ±¸ÇÒ ¼ö ÀÖ´Ù
File.h
http://www.angelfire.com/country/aldev0/cpphowto/File.h
¿Í File.cpp
File.cpp
'Source code of C++'¸¦ click Ç϶ó.
Java: Java.io.File class http://java.sun.com/j2se/1.3/docs/api/java/io/File.html
JavaÀÇ File Class ·¹ÆÛ·±½º http://unicornsrest.org/reference/java/qref11/java.io.File.html
C++ ¿¡¼ÀÇ ¸Þ¸ð¸® ÇÒ´ç
C¿¡¼´Â, ¸Þ¸ð¸®ÀÇ ÇÒ´ç°ú ÇØÁ¦¸¦ À§ÇØ malloc()°ú free()¸¦ ºñ·ÔÇÑ malloc()°è¿ÀÇ ÇÔ¼ö¸¦
¾²Áö¸¸, ´Ùµé ´ÜÁ¡À» °®°í ÀÖ´Ù.
±×·¡¼ C++ Àº ¸Þ¸ð¸®¸¦ ´Ù·ç±â À§ÇÑ ¿¬»êÀÚµéÀ» µµÀÔÇß°í, À̵éÀº
new ¿Í deleteÀÌ´Ù.
ÀÌ ¿¬»êÀÚµéÀº ½ÇÇà½Ã¿¡ Èü(heap - ȤÀº ÀÚÀ¯ °ø°£)À¸·ÎºÎÅÍ ¸Þ¸ð¸®¸¦ ÇÒ´ç, ÇØÁ¦ÇÑ´Ù.
C++¿¡¼´Â Á¤¸»·Î ²À malloc()À̳ª free()¸¸À» ½á¾ßÇÏ´Â »óȲÀÌ ¾Æ´Ï¶ó¸é ¾ðÁ¦³ª
new ¿Í delete¸¦ ½á¾ßÇÑ´Ù.
±×·¯³ª ÁÖÀÇÇÒ Á¡Àº, ÀÌ µÎ °¡Áö¸¦ ¼¯¾î¼ ¾²¸é ¾ÈµÈ´Ù´Â °ÍÀÌ´Ù.
malloc()À¸·Î ¾òÀº ¸Þ¸ð¸®¸¦ delete·Î ÇØÁ¦ÇÒ ¼ö´Â ¾ø°í, ¹Ý´ë·Î new·Î ¾òÀº ¸Þ¸ð¸®¸¦
free()½Ãų ¼öµµ ¾ø´Ù.
C++ Zap (Delete) ÇÔ¼ö
C++¿¡¼ÀÇ
delete ¿Í new
¿¬»êÀÚ´Â CÀÇ malloc, freeº¸´Ù ³´´Ù. µû¶ó¼ malloc°ú free ´ë½Å new¿Í zap(delete)¸¦
¾²µµ·Ï ÇÏ´Â °ÍÀÌ ÁÁ´Ù.
delete ¿¬»êÀÚ°¡ Á» ´õ ±ò²ûÇϰÔ
»ç¿ëµÇ°Ô ÇϱâÀ§ÇØ ´ÙÀ½°ú °°Àº Zap() inline ÇÔ¼ö¸¦ ¸¸µéÀÚ.
´ÙÀ½°ú °°ÀÌ zap()À» Á¤ÀÇÇÏÀÚ.
// x°¡ NULLÀÎÁö üũÇϱâ À§ÇØ assert¸¦ »ç¿ëÇÏ¿´´Ù.
// ÀÌ´Â ÇÁ·Î±×·¥ÀÇ "³í¸®Àû" ¿¡·¯¸¦ ¹Ì¸® Àâ¾Æ³»±â À§ÇÑ °ÍÀÌ´Ù.
// delete°¡ NULLÀÎ °æ¿ì¿¡µµ Àß µ¿ÀÛÇϱä ÇÏÁö¸¸, assert¸¦
// »ç¿ëÇÔÀ¸·Î½á Á» ´õ ÀÏÂï ¿¡·¯¸¦ Àâ¾Æ³¾ ¼ö ÀÖ´Ù.
// ZapÀ» templateÀ» »ç¿ëÇÏ¿© Á¤ÀÇÇÏÀÚ.
// delete´ë½Å zapÀ» »ç¿ëÇÏ¸é ´õ ±ò²ûÇÒ °ÍÀÌ´Ù.
template <class T>
inline void zap(T & x)
{
{assert(x != NULL);}
delete x;
x = NULL;
}
// C++¿¡ µÎ °¡Áö delete ¿¬»êÀÚÀÇ ¿ë¹ýÀÌ ÀÖ´Â ÀÌÀ¯´Â C++ ¿¡°Ô
// ÇÑ °´Ã¼¿¡ ´ëÇÑ Æ÷ÀÎÅÍ¿Í °´Ã¼ÀÇ ¹è¿¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ±¸º°Çϵµ·Ï
// ¸»ÇØÁÖ´Â ¹æ¹ýÀÌ ÇÊ¿äÇϱ⠶§¹®ÀÌ´Ù.
// delete¿¬»êÀÚ´Â ÇÁ·Î±×·¡¸Ó¿¡°Ô "[]"¸¦ ¾²°ÔÇÔÀ¸·Î½á À̸¦ ±¸º°ÇÑ´Ù.
// µû¶ó¼ ¿ì¸®´Â Æ÷ÀÎÅÍÀÇ ¹è¿À» Áö¿ì±â À§ÇÑ zaparr ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù
template <class T>
inline void zaparr(T & x)
{
{assert(x != NULL);}
delete [] x;
x = NULL;
}
zap()ÇÔ¼ö´Â Æ÷ÀÎÅ͸¦ delete½Ã۰í NULL·Î ¼¼ÆÃÇÑ´Ù.
ÀÌ´Â ¶È°°Àº delete Æ÷ÀÎÅÍ¿¡ ´ëÇØ ¿©·¯¹øÀÇ zap()ÀÌ
ºÒ·Á¼ ÇÁ·Î±×·¥ÀÌ ¸Á°¡Áö´Â °ÍÀ» ¹æÁöÇÑ´Ù.
´ÙÀ½ÀÇ zap_example()ÇÔ¼ö¸¦ º¸¾Æ¶ó.
example_String.cpp
'Source code of C++'À» Ŭ¸¯Çضó.
// example_String.cpp¿¡¼ zap_example()¸¦ º¸¶ó.
zap(pFirstname);
//zap(pFirstname); // pFirstnameÀÌ NULLÀ̹ǷΠÄÚ¾î ´ýÇÁ°¡ ÀϾÁö ¾Ê´Â´Ù.
//zap(pFirstname); // pFirstnameÀÌ NULLÀ̹ǷΠÄÚ¾î ´ýÇÁ°¡ ÀϾÁö ¾Ê´Â´Ù.
zap(pLastname);
zap(pJobDescription);
int *iiarray = new int[10];
zaparr(iiarray);
¹¹ Ưº°ÇÑ °ÍÀÌ ÀÖ´Â °ÍÀº ¾Æ´Ï°í, À̰ÍÀº ´ÜÁö ¹Ýº¹ÀûÀÎ Äڵ带 ÁÙÀ̰í
ŸÀÌÇÎÇÏ´Â ½Ã°£À» ¾Æ²¸ÁÖ¸ç ÇÁ·Î±×·¥À» Á» ´õ Àбâ ÁÁ°Ô ¸¸µé¾îÁÖ´Â °Í »ÓÀÌ´Ù.
C++ ÇÁ·Î±×·¡¸ÓµéÀº ÀÚÁÖ deleteÇÑ pointer¸¦ NULL·Î ¼¼ÆÃÇÏ´Â °ÍÀ» Àش´Ù.
±×¸®°í ÀÌ´Â ÄÚ¾î´ýÇÁ¿Í ¿ÀÀÛµ¿À¸·Î À̾îÁú ¼ö ÀÖ´Ù.
zap()Àº ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÀÚµ¿À¸·Î ó¸®ÇØÁØ´Ù.
zap()¿¡ ŸÀÔ Ä³½ºÆÃÀ» ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ¸¸¾à À§ zap()ÇÔ¼ö¿¡¼ ¿¡·¯°¡ ³´Ù¸é,
´Ù¸¥ µ¥¼ ½ÃÀÛµÈ ¿¡·¯ÀÏ °ÍÀÌ´Ù.
¶ÇÇÑ
, my_realloc() °ú my_free() ÀÌ
malloc(), realloc() ±×¸®°í free() ´ë½Å ¾²¿©¾ß ÇÑ´Ù.
À̵éÀº ÈξÀ ±ò²ûÇϰí, ¿©·¯°¡Áö üũµµ ÇØÁØ´Ù.
¿¹¸¦µé¾î,
°ú
my_free() ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â "String.h" ÆÄÀÏÀ» º¸¶ó.
ÁÖÀÇ :
'new'·Î ÇÒ´çµÈ ¸Þ¸ð¸®¸¦ ÇØÁ¦Çϱâ À§ÇØ free()¸¦ ¾²°Å³ª, malloc()À¸·Î ÇÒ´çµÈ
¸Þ¸ð¸®¸¦ ÇØÁ¦Çϱâ À§ÇØ 'delete'¸¦ ¾²Áö ¸»¾Æ¶ó. ±×·¸Áö ¾ÊÀ¸¸é
°á°ú¸¦ ¿¹ÃøÇÒ ¼ö ¾ø´Â ¿¡·¯¿¡ ºüÁú °ÍÀÌ´Ù.
example_String.cpp ¿¡¼ 'Source code of C++' ¸¦ Ŭ¸¯ÇÑ´ÙÀ½, zapÇÔ¼öÀÇ ¿¹¸¦ º¸¾Æ¶ó.
my_malloc °ú my_free ÀÇ »ç¿ë
malloc°ú realloc À» ÃÖ´ëÇÑ »ç¿ëÇÏÁö ¸»°í, new ¿Í
(delete)À» »ç¿ëÇØ¶ó.
±×·¯³ª ¶§·Î´Â C++¿¡¼ C ½ºÅ¸ÀÏÀÇ ¸Þ¸ð¸® ÇÒ´çÀ» »ç¿ëÇØ¾ß ÇÒ Çʿ䵵 ÀÖ´Ù.
ÀÌ ¶§´Â my_malloc() ,
my_realloc() ,
my_free() À» »ç¿ëÇØ¶ó.
ÀÌ ÇÔ¼öµéÀº ÀûÀýÇÑ ÇÒ´ç°ú Ãʱâȸ¦ ÇØÁÖ°í, ¸Þ¸ð¸® ¹®Á¦¸¦ ¿¹¹æÇØÁØ´Ù.
¶ÇÇÑ ÀÌ ÇÔ¼öµéÀº DEBUG¸ðµå¿¡¼ ¸Þ¸ð¸® ÇÒ´çÀ» ÃßÀûÇØÁÖ°í, ÇÁ·Î±×·¥ ½ÇÇà
ÀüÈÄ¿¡ ÃÑ ¸Þ¸ð¸® »ç¿ë·®À» Ç¥½ÃÇØÁØ´Ù. ÀÌ´Â ¸Þ¸ð¸® ¸¯ÀÌ ÀÖ´ÂÁö¸¦
¾Ë·ÁÁÙ °ÍÀÌ´Ù.
my_malloc °ú my_reallocÀº ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾú´Ù.
ÀÌ´Â ¾à°£ÀÇ ¸Þ¸ð¸®¸¦ ´õ ÇÒ´çÇØ¼ (SAFE_MEM = 5) ÃʱâȽÃ۰í,
¸Þ¸ð¸®¸¦ ÇÒ´çÇÒ ¼ö ¾øÀ¸¸é ÇÁ·Î±×·¥À» Á¾·áÇÑ´Ù.
'call_check(), remove_ptr()' ÇÔ¼ö´Â DEBUG_MEM °¡ makefile¿¡¼
((void)0) (ÀÌ´Â NULLÀ» ÀǹÌÇÑ´Ù)À¸·Î ÁöÁ¤µÇ¾îÀÖÀ» ¶§¿¡¸¸ ÀÛµ¿ÇÑ´Ù.
ÀÌ´Â ÃÑ ¸Þ¸ð¸® »ç¿ë·®À» ÃßÀûÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù.
void *local_my_malloc(size_t size, char fname[], int lineno)
{
size_t tmpii = size + SAFE_MEM;
void *aa = NULL;
aa = (void *) malloc(tmpii);
if (aa == NULL)
raise_error_exit(MALLOC, VOID_TYPE, fname, lineno);
memset(aa, 0, tmpii);
call_check(aa, tmpii, fname, lineno);
return aa;
}
char *local_my_realloc(char *aa, size_t size, char fname[], int lineno)
{
remove_ptr(aa, fname, lineno);
unsigned long tmpjj = 0;
if (aa) // aa != NULL
tmpjj = strlen(aa);
unsigned long tmpqq = size + SAFE_MEM;
size_t tmpii = sizeof (char) * (tmpqq);
aa = (char *) realloc(aa, tmpii);
if (aa == NULL)
raise_error_exit(REALLOC, CHAR_TYPE, fname, lineno);
// do not memset memset(aa, 0, tmpii);
aa[tmpqq-1] = 0;
unsigned long kk = tmpjj;
if (tmpjj > tmpqq)
kk = tmpqq;
for ( ; kk < tmpqq; kk++)
aa[kk] = 0;
call_check(aa, tmpii, fname, lineno);
return aa;
}
my_malloc ÀÇ ¸ðµç ±¸ÇöÀ» º¸·Á¸é
¿¡¼
ÀÇ Çì´õÆÄÀÏÀ» º¸¸é µÈ´Ù.
my_malloc °ú my_free ¸¦ ¾²´Â ¿¹´Â ´ÙÀ½°ú °°´Ù.
char *aa;
int *bb;
float *cc;
aa = (char *) my_malloc(sizeof(char)* 214);
bb = (int *) my_malloc(sizeof(int) * 10);
cc = (float *) my_malloc(sizeof(int) * 20);
aa = my_realloc(aa, sizeof(char) * 34);
bb = my_realloc(bb, sizeof(int) * 14);
cc = my_realloc(cc, sizeof(float) * 10);
my_realloc ¿¡¼ data typeÀ» cast ÇÒ Çʿ䰡 ¾ø´Â °Í¿¡ ÁÖÀÇÇØ¶ó.
ÀÌ´Â ÀÎÀÚ·Î ¹ÞÀº º¯¼öÀÇ Å¸ÀÔ¿¡ ¸ÂÃç¼ ¸®ÅϰªÀ» º¸³»±â ¶§¹®ÀÌ´Ù.
The my_realloc ÇÔ¼ö´Â char *, int *, float * ŸÀÔÀ¸·Î ¿À¹ö·Îµù
µÇ¾îÀÖ´Ù.
C++ ¿¡¼ÀÇ °¡¹ÙÁö ÄÝ·ºÅÍ
C/C++¿¡¼ °¡ºñÁö ÄÝ·º¼ÇÀº Ç¥ÁØ¿¡¼ Áö¿øµÇÁö ¾Ê°í, µû¶ó¼ ¸Þ¸ð¸®¸¦ Á÷Á¢
ÇÒ´ç, ÇØÁ¦ÇÏ´Â °ÍÀÌ ¾î·Æ°í º¹ÀâÇÏ¸ç ¿¡·¯¸¦ ³»±â ½±´Ù.
°¡ºñÁö ÄÝ·º¼Ç(GC:Garbage Collection) Àº
±¸ÇöÇÏ´Â ¹æ¹ýÀÌ ¿©·¯°¡Áö°¡ ÀÖ°í, °¢ ÇÁ·Î±×·¥¸¶´Ù Àû¿ëµÉ ¼ö ÀÖ´Â ¹æ¹ýÀÌ
´Ù¸£±â ¶§¹®¿¡ C++ Ç¥ÁØÀÇ ÀϺΰ¡ µÉ ¼ö ¾ø¾ú´Ù.
Àü»êÇÐÀÚµéÀº ¸¹Àº GC ¾Ë°í¸®ÁòÀ» °³¹ßÇß°í, À̵éÀº °¢ ¹®Á¦ºÐ¾ß¿¡¼¸¸
Àû¿ëµÉ ¼ö ÀÖ´Â °ÍµéÀ̾ú´Ù.
Áï, ¸ðµç ÀϹÝÀûÀÎ ¹®Á¦¿¡ Àû¿ëµÉ ¼ö ÀÖ´Â ÇϳªÀÇ ¹ü¿ë GC¾Ë°í¸®ÁòÀº ¾ø´Ù.
µû¶ó¼ GC´Â C++ Ç¥ÁØ¿¡ µé¾î°¡Áö ¸øÇß´Ù. µû¶ó¼ ¾ðÁ¦³ª ÇÏ´Â ÀÏ¿¡ ¸Â´Â
C++ ¶óÀ̺귯¸®¸¦ ¸¹Àº ¶óÀ̺귯¸®µé Áß¿¡¼ °í¸¦ ¼ö ÀÖ´Ù.
´ÙÀ½ C++
°¡ºñÁö ÄÝ·º¼Ç(Garbage Collection)
»çÀÌÆ®¿Í
¸Þ¸ð¸® °ü¸® »çÀÌÆ®¸¦ °¡º¸¾Æ¶ó.
Æ÷ÀÎÅͰ¡ ¹®Á¦ÀÌ´Ù
Æ÷ÀÎÅÍ´Â ÀϹÝÀûÀÎ ÇÁ·Î±×·¥¿¡¼ ²À ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï´Ù.
Java¿Í °°Àº Çö´ë ¾ð¾î¿¡¼´Â Æ÷ÀÎÅͰ¡ ¾ø´Ù (Java´Â ³»ºÎÀûÀ¸·Î¸¸
Æ÷ÀÎÅ͸¦ »ç¿ëÇÑ´Ù).
Æ÷ÀÎÅÍ´Â ÇÁ·Î±×·¥À» ¾îÁö·´°í Àбâ Èûµé°Ô ¸¸µç´Ù.
ÃÖ´ëÇÑ Æ÷ÀÎÅÍÀÇ »ç¿ëÀ» ÇÇÇϰí, ´ë½Å ·¹ÆÛ·±½º¸¦ »ç¿ëÇØ¶ó.
Æ÷ÀÎÅÍ´Â Á¤¸» ¹®Á¦°¡ ¸¹°í, Æ÷ÀÎÅÍ ¾øÀÌ ÇÁ·Î±×·¥À» ¾²´Â °Ô °¡´ÉÇÏ´Ù.
Æ÷ÀÎÅÍ´Â ·¹ÆÛ·±½º¸¦ ¾µ ¼ö ¾ø´Â °÷¿¡¼¸¸ ½á¾ßÇÑ´Ù.
·¹ÆÛ·±½º
´Â º°Äª(alias)ÀÌ´Ù. ·¹ÆÛ·±½º¸¦ ¸¸µé¸é, ÀÌ´Â ´Ù¸¥ °´Ã¼(ȤÀº ´ë»ó)¿¡ ´Ù¸¥ À̸§À»
ÁÖ´Â °ÍÀÌ´Ù. ±× ¼ø°£ºÎÅÍ ·¹ÆÛ·±½º´Â ´ë»óÀÇ ´Ù¸¥ À̸§À¸·Î¼ µ¹¾Æ°¡°í,
·¹ÆÛ·±½º¿¡ ÇàÇÏ´Â ¸ðµç ¿¬»êÀÌ ±× ´ë»ó¿¡ ½ÇÁ¦·Î Àû¿ëµÈ´Ù.
·¹ÆÛ·±½ºÀÇ ¹®¹ý :
ŸÀÔÀ» ¼±¾ðÇÒ ¶§, µÚ¿¡ ·¹ÆÛ·±½º ¿¬»êÀÚ (&) ¸¦ ºÙÀÓÀ¸·Î½á ·¹ÆÛ·±½º¸¦ ¼±¾ðÇÒ ¼ö ÀÖ´Ù.
·¹ÆÛ·±½º´Â ¹Ýµå½Ã ¸¸µé¾î Áú ¶§ ÃʱâÈ µÇ¾î¾ß ÇÑ´Ù.
´ÙÀ½ÀÇ ¿¹¸¦ º¸ÀÚ -
int weight;
int & rweight = weight;
DOG aa;
DOG & rDogRef = aa;
·¹ÆÛ·±½º¸¦ »ç¿ëÇÒ ¶§ Áöų °Í -
°´Ã¼¿¡ ´ëÇÑ ´Ù¸¥ À̸§À» ÁÖ°íÀÚ ÇÒ ¶§ ·¹ÆÛ·±½º¸¦ »ç¿ëÇØ¶ó.
¸ðµç ·¹ÆÛ·±½º´Â ÃʱâȵǾî¾ß ÇÑ´Ù.
ÇÁ·Î±×·¥ÀÇ ³ôÀº È¿À²°ú ÆÛÆ÷¸Õ½º¸¦ À§ÇØ ·¹ÆÛ·±½º¸¦ »ç¿ëÇØ¶ó
·¹ÆÛ·±½º¿Í Æ÷ÀÎÅ͸¦ º¸È£Çϱâ À§ÇØ °¡´ÉÇѰæ¿ì¸é ¾ðÁ¦³ª
const¸¦ »ç¿ëÇØ¶ó.
·¹ÆÛ·±½º¸¦ »ç¿ëÇÒ ¶§ ÇÏÁö ¸»¾Æ¾ß ÇÒ °Í -
Áß¿ä : NULLÀÎ °´Ã¼¿¡ ´ëÇØ ·¹ÆÛ·±½º¸¦ ¾²Áö ¸»¾Æ¶ó.
Æ÷ÀÎÅÍÀÇ ÁÖ¼Ò¸¦ ³ªÅ¸³»´Â &¿Í ·¹ÆÛ·±½º ¿¬»êÀÚ¸¦ Çò°¥¸®Áö ¸¶¶ó.
·¹ÆÛ·±½º ¿¬»êÀÚ´Â ¿ÀÁ÷ ¼±¾ðºÎ (À§¿¡ ³ª¿ÍÀÖ´Â ·¹ÆÛ·±½º »ç¿ë¹ý ÂüÁ¶) ¿¡¼¸¸ ¾²ÀδÙ.
·¹ÆÛ·±½º¿¡ »õ·Î °ªÀ» ÁöÁ¤ÇÏ·Á(Áï, º¯°æÇÏ·Á) ÇÏÁö ¸¶¶ó.
·¹ÆÛ·±½º¸¦ ¾µ ¼ö ÀÖ´Ù¸é Æ÷ÀÎÅ͸¦ ¾²Áö ¸¶¶ó.
Áö¿ªº¯¼ö¿¡ ´ëÇÑ ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇÏÁö ¸¶¶ó.
·¹ÆÛ·±½º°¡ ½ºÄÚÇÁ°¡ ¹þ¾î³ º¯¼ö¸¦ °¡¸®Å°µµ·Ï ÇÏÁö ¸¶¶ó.
µð¹ö±ë
Á¤È®ÇÑ ¹ö±×ÀÇ ¿øÀÎÀ» ¾Ë¾Æ³»´Â °ÍÀº ²Ï³ª ¼º°¡½Å ÀÏÀÌÁö¸¸,
¿©±â¿¡µµ ¸î°¡Áö Å×Å©´ÐÀÌ ÀÖ´Ù.
Ç¥ÁØÃâ·ÂÀ¸·Î ÇÁ¸°Æ®ÇÏ¿© - ÇÁ·Î±×·¥ÀÌ °£´ÜÇÑ °æ¿ì, ¸î¸î º¯¼öµéÀÇ °ªÀ»
ÇÁ¸°Æ®Çغ¸°í, ¾î¶² °ªÀÎÁö º»´Ù - ¹«¾ùÀÌ À߸øµÇ¾ú´ÂÁö ã±â
µð¹ö°Å¸¦ ÀÌ¿ëÇϱâ. µð¹ö°Å´Â breakpoint¸¦ ¼³Á¤Çϰí, ½ÇÇ൵Áß¿¡ Äڵ带
ÃßÀûÇØº¼ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù. ´ëºÎºÐÀÇ IDE´Â µð¹ö°Å°¡ °°ÀÌ ÀÖ´Ù.
GNU ½Ã½ºÅÛÀÇ °æ¿ì, gdb°¡ ÀÖ´Ù.
ÄÄÆÄÀÏ·¯¿¡¼ Áö¿øÇÏ´Â ¿É¼ÇµéÀ» »ç¿ëÇÏ¿© º¸´Ù ¸¹Àº °æ°í(warning)À» º¼ ¼ö ÀÖµµ·Ï
ÇØ¶ó. ¿¹¸¦µé¾î g++ÀÇ °æ¿ì, -Wall ¿É¼ÇÀ» »ç¿ëÇØ¶ó.
µð¹ö±ë¿¡ µµ¿òÀÌ µÇ´Â »çÀÌÆ® :
Unix ȯ°æ¿¡¼ C, C++ µð¹ö±ëÇϱâ
http://www.liacs.nl/~jdassen/onderwijs/stuva/debug/debug.html
MPatrol - À¯¿ëÇÑ ¸Þ¸ð¸® µð¹ö±ë Åø : http://www.cbmamiga.demon.co.uk/mpatrol
NJAMD - ¿ª½Ã À¯¿ëÇÑ ¸Þ¸ð¸® µð¹ö±ë Åø : http://sourceforge.net/projects/njamd/
LeakTracer - ¸Þ¸ð¸® ¸¯À» ã´Â °£´ÜÇϸ鼵µ À¯¿ëÇÑ Åø : http://www.andreasen.org/LeakTracer/
µð¹ö±ë ÆÄÀÏ
C++À̳ª C ÇÁ·Î±×·¥À» µð¹ö±ëÇÏ·Á¸é ÀÇ ÆÄÀÏÀ» ÀÎŬ·çµåÇϰí,
'Makefile'¿¡ DEBUG_STR, DEBUG_PRT , DEBUG&_MEMÀ» µðÆÄÀÎ ÇØ¼
debug.h ÀÇ ÇÔ¼öµé·Î ÃßÀûÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.
'-DDEBUG_STR' µîÀ» ¾ø¾Ù ¶§, µð¹ö±ë ÇÔ¼öµéÀº ((void)0) (NULLÀ» ÀǹÌ)À¸·Î ¼¼ÆÃµÉ
°ÍÀÌ´Ù. µû¶ó¼ ÃÖÁ¾ °á°ú¹°¿¡´Â ¾Æ¹«·± ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù.
ÀÌ µð¹ö±ë ÇÔ¼öµéÀº ÇÁ·Î±×·¥¿¡ ´Ù¾çÇÏ°Ô Àû¿ëµÉ ¼ö ÀÖÀ» °ÍÀ̰í, °á°ú¹°ÀÇ Å©±â¸¦
Áõ°¡½ÃŰÁö´Â ¾ÊÀ» °ÍÀÌ´Ù.
debug ·çƾÀÇ ±¸ÇöÀ» À§Çؼ´Â ¸¦ ÂüÁ¶Çضó.
¶ÇÇÑ, ¿¡¼ debug.h ¿Í µð¹ö±ë ÇÔ¼öµéÀ»
ÀÌ¿ëÇÑ ¿¹Á¦ ÇÁ·Î±×·¥À» º¸¾Æ¶ó.
ÀÇ ¿¹¸¦ º¸¶ó.
C++À» À§ÇÑ IDE(Integrated Development Enviroment)¿Í ¿¡µðÅÍ
C++·Î ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¶§, ¿¡µðÅͳª IDE¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ´ëºÎºÐÀÇ
ÇÁ·Î±×·¡¸Ó´Â ÀÚ½ÅÀÌ ÁÁ¾ÆÇÏ´Â °ÍµéÀ» °®°Ô ¸¶·ÃÀ̰í, ¾î¶² °ÍÀÌ ÁÁÀºÁö¿¡
´ëÇØ °ÅÀÇ Á¾±³ÀûÀÎ ¹ÏÀ½À» °®´Â´Ù.
³Ê´Â ³»Àå ¿¡µðÅÍ¿Í ÄÄÆÄÀÏ·¯, ¹®¼µé°ú ±âŸ µîµîÀ¸·Î ¸ðµÎ Æ÷ÇÔÇÏ´Â
IDE (Intergrated Development Environment : ÅëÇÕ °³¹ßȯ°æ)¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.
¶Ç´Â ¸î¸î »ç¶÷µéÀÌ ±×·¯´Â °Í ó·³, ´Ü¼øÇÑ ¿¡µðÅ͸¸À» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.
IDE µé
C++ °³¹ßÀ» À§ÇÑ ´ÙÀ½°ú °°Àº IDE (Integrated Development Environment) toolÀÌ ÀÖ´Ù.
ÃÖ°í·Î ÀÎÁ¤¹Þ´Â Dev-C++Àº win32¿Í Linux¿¡¼ µ¿ÀÛÇÏ´Â ¸¸´É IDEÀÌ´Ù.
ÀÌ´Â GCC¿Í Mingw, CygwinÀ» ÄÄÆÄÀÏ·¯¿Í ¶óÀ̺귯¸®·Î »ç¿ëÇÑ´Ù.
ÀÌ´Â http://www.bloodshed.net/devcpp.html
¿Í ¹Ì·¯ »çÀÌÆ®
¿¡¼ ±¸ÇÒ ¼ö ÀÖ´Ù.
KDE KDevelop Kdevelop
Blatura site C++ Tools
Amulet Amulet
App Dev suite Angoss
Make replacement Brass
S/W product metrics CCC
Project mgmt, edit, compile, debug C-Forge
Dev environment Code Crusader
Graphic gdb Code Medic
Code analysis CodeWizard
Gen HTML, LaTex for C++ cod Doc C++
GUI toolkit openGL Ftk
C++ and Java IDE GLG IDE
HP IDE HP Eloquence
IDE C++, Java, Pascal RHIDE
IDE for C++, Java SNiff
IDE for C++, Java Wipeout
X-based dev env XWPE
¿¡µðÅÍ
IDEÀÇ ¹®Á¦Á¡Àº ÀÌ¿¡ °°ÀÌ µé¾îÀÖ´Â ¿¡µðÅÍÀÇ ±â´ÉÀÌ ¸Å¿ì ¶³¾îÁø´Ù´Â °ÍÀÌ´Ù.
µû¶ó¼ ¸¹Àº »ç¶÷µéÀº ÆÄ¿öÇ®ÇÑ ¿¡µðÅ͸¦ ¿øÇß°í, ÄÄÆÄÀÏ·¯¿Í ÇÔ²² »ç¿ëÇÑ´Ù.
ÆÄ¿öÇ®ÇÑ ¿¡µðÅͷδ vim°ú emacs¸¦ µé ¼ö ÀÖ´Ù.
µÑ ´Ù ¸ðµÎ ¸¹Àº Ç÷§Æû¿¡¼ µ¿ÀÛÇϰí, È¿À²¼ºÀ» ³ô¿©ÁÙ ½ÅÅýº ÇÏÀ̶óÀÌÆÃÀ»
ºñ·ÔÇÑ ¿©·¯°¡Áö ±â´ÉµéÀ» °®°í ÀÖ´Ù.
´Ù¸¥ °ÍÀ¸·Î´Â UltraEdit(win32 only) ¿Í EditPlus(win32 only)°¡ ÀÖ´Ù.
Vim »çÀÌÆ® http://vim.sourceforge.net/
Vim HOWTO http://www.linuxdoc.org/LDP/HOWTO/Vim-HOWTO.html
Emacs »çÀÌÆ® http://www.gnu.org/software/emacs/
EditPlus for Windows »çÀÌÆ® http://www.editplus.com/
UltraEdit for Windows »çÀÌÆ® http://www.ultraedit.com/
´Ù¸¥ Âü°íÇÒ¸¸ÇÑ ³»¿ë
C++ Beautifier HOWTO http://www.linuxdoc.org/LDP/HOWTO/C-C++Beautifier-HOWTO.html
( Çѱ۹ø¿ª )
C++ ÇÁ·Î±×·¥À» À§ÇÑ ¹öÀü°ü¸® ½Ã½ºÅÛ HOWTO (CVS HOWTO) http://www.linuxdoc.org/LDP/HOWTO/CVS-HOWTO.html
À¯¿ëÇÑ ¸®´ª½º »çÀÌÆ® http://www.milkywaygalaxy.freeservers.com
¿Í ¹Ì·¯ »çÀÌÆ® -
angelfire,
geocities,
virtualave,
50megs,
theglobe,
NBCi,
Terrashare,
Fortunecity,
Freewebsites,
Tripod,
Spree,
Escalix,
Httpcity,
Freeservers.
C++ Online ÅØ½ºÆ®¿Í ¹®¼µé
C++¿¡ ´ëÇÑ ¼ö¹é¸¸ÀÇ ¿Â¶óÀÎ ¹®¼/ÅØ½ºÆ®/Âü°íÀÚ·á °¡ÀÌµå µîÀÌ Á¸ÀçÇÑ´Ù. ÀÌ´Â C++ÀÌ ¸Å¿ì ¿À·§µ¿¾È ¾²À̰í Àֱ⠶§¹®ÀÌ´Ù. ¾Æ¸¶
Google, Yahoo, Lycos, Excite µîÀÇ ÀÎÅÍ³Ý °Ë»ö¿£ÁøÀ» »ç¿ëÇÏ¸é µµ¿òÀÌ µÉ °ÍÀÌ´Ù.
"C++ Annotations" ¿Â¶óÀÎ ºÏ »çÀÌÆ®:Annotations
"Teach Yourself C++ in 21 days" ¿Â¶óÀÎ »çÀÌÆ® Teach C++
C++ Textbook by Bruce Eckel Thinking in C++
C++ Open books: Panorama
Open Books¸¦ Ŭ¸¯ÇÏ¸é µÈ´Ù.
"Who's Afraid of C++?" online textbook: Steveheller
"Introduction to Object Oriented Programming" an ebook C++ OOP
C++ in Hypertext C++ Hypertext
Object Oriented Systems OOP article
C++ Language Reference from cplusplus.com http://www.cplusplus.com/ref
C++ Documentation from cplusplus.com http://www.cplusplus.com
Common C++ Pitfalls to be avoided http://www.horstmann.com/cpp/pitfalls.html
Porting C++ to Java PortingC
C/C++ Journals UtahJournals
Yahoo C++ category site CCyahoo
C Library Reference Guidec_guide
Online textbooks C++/Java FreeLib
"C++ In Action" by Bartosz Milewski at http://www.relisoft.com/book/index.htm
¾î¶»°Ô Äڵ带 ¾²¸é ¾ÈµÇ´Â°¡¿¡ ´ëÇÑ Àç¹ÌÀÖ´Â ¿¹Á¦.
"How to write unmaintainable code"
http://mindprod.com/unmain.html
C++ ÇÁ·Î±×·¡¸Ó¸¦ À§ÇØ À¯¿ëÇÒ Java Ã¥µé :
Great Web reference site WebRef
Many Java books JBooks
Intro to Java V3.0 JavaNotes
mirror JavaNotes
Web Library: http://www.itlibrary.com
Thinking in Java: Thinking Java
John Hopkins Univ - Java resources Hall
online Java tutorial Chortle
Practical guide for Java SunBooks
Java Soton
C++ »çÀÌÆ®µé
´ÙÀ½ÀÇ C++ »çÀÌÆ®µéÀ» ¹æ¹®Çغ¸¶ó :-
C++ STL basic_string class ¹®¼ -
http://www.sgi.com/tech/stl/basic_string.html.
¼½¼ÇÀ» Âü°íÇØ¶ó.
C++ Crash-proof site http://www.troubleshooters.com/codecorn/crashprf.htm
C++ Memory sitehttp://www.troubleshooters.com/codecorn/memleak.htm
GNU Main site http://www.gnu.org and
gnu C++ site at http://gcc.gnu.org
AS University C++ Standard String class http://www.eas.asu.edu/~cse200/outline
Java JString for C++ http://www.mike95.com/c_plusplus/classes/JString/JString_cpp.asp
C++ Language Reference http://www.msoe.edu/~tritt/cpplang.html
C++ Program examples and samples http://www.msoe.edu/~tritt/cpp/examples.html
Neil's C++ stuff http://www.cyclone7.com/cpp
ÀÎÅͳݿ¡´Â ¾î¸¶¾î¸¶ÇÏ°Ô ¸¹Àº C++ ¹®¼µéÀÌ ÀÖ´Ù.
Google, Yahoo, Lycos, Infoseek, Excite °°Àº °Ë»ö¿£Áø¿¡ °¡¼
´ÙÀ½ÀÇ Å°¿öµå¸¦ ³Ö¾îº¸¾Æ¶ó.
'C++ tutorials'
'C++ references'
'C++ books'
Advanced ¸¦ Ŭ¸¯Çؼ
search by exact phrase¸¦ ¼±ÅÃÇÔÀ¸·Î½á
´õ Á¤È®ÇÑ °á°ú¸¦ ¾òÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù.
http://www.google.com
http://www.yahoo.com
http://www.lycos.com
http://www.infoseek.com
http://www.excite.com
http://www.mamma.com
C++ Tutorials
ÀÎÅͳݿ¡´Â ¸¹Àº ¼öÀÇ ¿Â¶óÀÎ Æ©Å丮¾óÀÌ ÀÖ´Ù. °Ë»ö¿£Áø¿¡¼ 'C++ tutorials'·Î
°Ë»öÀ» ÇØºÁ¶ó.
C++ Tutorial http://www.xploiter.com/programming/c/index.shtml
Cplusplus.com Tutorial http://www.cplusplus.com/doc/tutorial
C++ Tutorial IISc, India http://www.csa.iisc.ernet.in/Documentation/Tutorials/StyleGuides/c++-style.html
C++ Tutorial Brown Univ http://wilma.cs.brown.edu/courses/cs032/resources/C++tutorial.html
C++ Tutorial http://home.msuiit.edu.ph/~ddd/tutorials/cpp/cpplist.htm
C++ Tutorial IOstreams http://osiris.sunderland.ac.uk/~cs0pdu/pub/com365/Sched3/iocpp.html
À¯¿ëÇÑ ¸µÅ©µé
Bird's eye view of C++ URLs ( 153°³ÀÇ URL link°¡ ÀÖ´Ù )
http://www.enteract.com/~bradapp/links/cplusplus-links.html
This URL: http://www.snippets.org
360°³ÀÇ ÆÄÀÏ¿¡ ÇØ´çÇÏ´Â C codeµéÀÌ ÀÖ´Ù.
Mathtools http://www.mathtools.net
´Â ¸ðµç °úÇÐ, °øÇÐÀû Çʿ信 ÀÇÇÑ ±â¼úÀûÀÎ ÄÄÇ»ÆÃ Æ÷Å»ÀÌ´Ù.
ÀÌ Æ÷Å»»çÀÌÆ®´Â ¹«·áÀ̰í, 2¸¸¿©°³ÀÇ À¯¿ëÇÑ ±â¼úÀûÀÎ ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¸ÓµéÀÇ
¸µÅ©¸¦ °¡Áö°í ÀÖ°í, C/C++, Java, Excel, MATLAB, Fortran µîÀ» ´Ù·ç°í ÀÖ´Ù.
C++ Quick-Reference
°Ë»ö¿£Áø¿¡¼ 'C++ Reference' ·Î °Ë»öÀ» ÇØº¸¾Æ¶ó.
C++ quick ref http://www.cs.jcu.edu.au/~david/C++SYNTAX.html
C++ Standard Library Quick Reference http://www.halpernwightsoftware.com/stdlib-scratch/quickref.html
C++ STL from halper http://www.halpernwightsoftware.com/stdlib-scratch/quickref.html
C++ Usenet ´º½º±×·ì
C++ newsgroups :
comp.lang.c++.announce
C++ newsgroups :
comp.lang.c++.*
C++ newsgroups : http://marshall-cline.home.att.net/cpp-faq-lite
Java ÇüÅÂÀÇ API
C++¿¡¼ Java ÇüÅÂÀÇ API¸¦ Á¦°øÇÏ´Â ´ÙÀ½ »çÀÌÆ®µéÀ» °¡º¸¾Æ¶ó.
Java utils in C++ http://www.pulsar.org/users/ej/archive/oop
PhD Thesis book Java API in C++ http://www.pulsar.org/archive/phd/ejphd
C++ ÄÚµù °ü½À
ÄÚµù °ü½ÀÀº ÇÁ·Î±×·¥ÀÇ °¡µ¶¼º°ú À¯Áöº¸¼ö¸¦ À§ÇØ ¸Å¿ì Áß¿äÇÑ ¿ä¼ÒÀÌ´Ù.
¶ÇÇÑ ÇÁ·Î±×·¡¸ÓÀÇ »ý»ê¼ºÀ» Å©°Ô Çâ»ó½ÃŲ´Ù.
ÀÌ´Â ÁÁÀº ÄÚµù ÈÆ·ÃÀ» À§ÇØ ÇÊ¿äÇÏ´Ù.
¾Æ·¡ÀÇ ³»¿ëÀº class Á¤ÀÇ¿¡ ÀÖ¾î Á¦¾ÈµÈ °ÍÀÌ´Ù.
¸ðµç public º¯¼öµéÀº mFooVar°ú °°ÀÌ m À¸·Î ½ÃÀÛÇØ¾ß ÇÑ´Ù.
m Àº member¸¦ ÀǹÌÇÑ´Ù.
¸ðµç protected º¯¼öµéÀº mtFooVar ¿Í °°ÀÌ
mt ·Î ½ÃÀÛÇØ¾ßÇϰí, ¸Þ½îµå´Â tFooNum() ¿Í °°ÀÌ t·Î ½ÃÀÛÇØ¾ß ÇÑ´Ù.
t ´Â protected¸¦ ÀǹÌÇÑ´Ù.
¸ðµç private º¯¼öµéÀº mvFooVar¿Í °°ÀÌ
mv ·Î ½ÃÀÛÇØ¾ßÇϰí, ¸Þ½îµåµéÀº
vFooLone() ¿Í °°ÀÌ v·Î ½ÃÀÛÇØ¾ß ÇÑ´Ù.
v ´Â private À» ÀǹÌÇÑ´Ù.
¸ðµç public, protected, private º¯¼öÀ̸§µéÀº m ´ÙÀ½¿¡´Â mFooVar ÀÇ F°°ÀÌ ´ë¹®ÀÚ·Î ½ÃÀÛÇØ¾ßÇÑ´Ù.
¸ðµç Æ÷ÀÎÅÍ º¯¼öµéÀº ´ÙÀ½°ú °°ÀÌ p·Î ½ÃÀÛÇØ¾ß ÇÑ´Ù.
Public º¯¼ö mpFooVar °ú ¸Þ½îµå FooNum()
Protected º¯¼ö mtpFooVar ¿Í ¸Þ½îµå tFooNum()
Private º¯¼ö mvpFooVar ¿Í ¸Þ½îµå vFooNum()
¼¼°èÀûÀ¸·Î ÀϰüµÈ C++ ÄÚµù °ü½ÀÀº º¸´Ù ÇÁ·Î±×·¡¹ÖÀ» Àß ÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁÙ °ÍÀÌ´Ù.
¾Æ·¡¿¡ ÁÖ¾îÁø ¿¹Á¦ Äڵ忡¼
t ´Â protected¸¦,
v ´Â private¸¦,
m ´Â member-variable ¸¦,
p ´Â pointer¸¦
ÀǹÌÇÑ´Ù.
class SomeFunMuncho
{
public:
int mTempZimboniMacho; // OOP¿¡¼´Â ¿ÀÁ÷ Àӽà º¯¼öµé¸¸ publicÀ̾î¾ß ÇÑ´Ù.
float *mpTempArrayNumbers;
int HandleError();
float getBonyBox(); // º¯¼ö¿¡ Á¢±ÙÇϱâ À§ÇÑ ÇÔ¼ö
float setBonyBox(); // º¯¼ö¿¡ Á¢±ÙÇϱâ À§ÇÑ ÇÔ¼ö
protected:
float mtBonyBox;
int *mtpBonyHands;
char *tHandsFull();
int tGetNumbers();
private:
float mvJustDoIt;
char mvFirstName[30];
int *mvpTotalValue;
char *vSubmitBars();
int vGetNumbers();
};
ÇÁ·Î±×·¥ÀÌ ¼ö¹é¸¸ ¶óÀÎÀ¸·Î Ä¿Áö°Ô µÇ¸é, À§¿Í °°Àº °ü½ÀÀ» ¸Å¿ì ÁÁ¾ÆÇϰÔ
µÉ °ÍÀÌ´Ù. ´Ü¼øÈ÷ mvFirstName ¶ó´Â º¯¼öÀ̸§À»
º» °Í¸¸À¸·Îµµ, À̰ÍÀÌ Å¬·¡½ºÀÇ ¸â¹öÀ̰í, private º¯¼ö¶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖÀ¸¹Ç·Î
ÄÚµåÀÇ °¡µ¶¼ºÀº ¿Ã¶ó°¡°Ô µÈ´Ù.
´ÙÀ½ÀÇ C++ ÄÚµù Ç¥ÁØ URLµéÀ» ¹æ¹®Çغ¸¾Æ¶ó.
C++ FAQ Lite - Coding standards http://www.parashift.com/c++-faq-lite/coding-standards.html
Rice university coding standard http://www.cs.rice.edu/~dwallach/CPlusPlusStyle.html
Identifiers to avoid in C++ Programs http://oakroadsystems.com/tech/cppredef.htm
Coding standards from Possibility http://www.possibility.com/Cpp/CppCodingStandard.html
and mirror site
Coding standards for Java and C++ from Ambysoft http://www.ambysoft.com/JavaCodingStandards.html
Rules and recommendations http://www.cs.umd.edu/users/cml/cstyle/
Indent and annotate http://www.cs.umd.edu/users/cml/cstyle/indhill-annot.html
Elemental rules http://www.cs.umd.edu/users/cml/cstyle/Ellemtel-rules.html
C++ style doc http://www.cs.umd.edu/users/cml/cstyle/Wildfire-C++Style.html
C++ Coding Standards by Brett Scolcum http://www.skypoint.com/~slocum/prog/cppstds.html
Logikos C++ Coding Standards http://www.logikos.com/standards/cpp_std.html
NRad C++ coding standards http://cadswes.colorado.edu/~billo/standards/nrad
BEJUG C++ coding standards http://www.meurrens.org/ip-Links/java/joodcs/ToddHoff.html
Arctic Labs coding standards http://www.arcticlabs.com/codingstandards
See also
For rapid navigation with ctags
Vim color text editor
To improve productivity see C++ Beautifier HOWTO
C++ ½ºÅ©¸³Æ® ¾ð¾î
C++ÀÇ Å« ´ÜÁ¡Àº Á¶±×¸¸ º¯°æÀ» ÇÒ ¶§¸¶´Ù Ç×»ó ÄÄÆÄÀϰú ¸µÅ©¸¦ ´Ù½Ã
ÇØÁÖ¾î¾ß ½ÇÇàÆÄÀÏÀ» ¸¸µé ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.
ÄÄÆÄÀÏ/¸µÅ©/µð¹ö±ë »çÀÌŬÀº ¸¹Àº ½Ã°£ÀÌ °É¸®°í »ý»êÀûÀÌÁö ¸øÇÏ´Ù.
Çö´ëÀÇ CPU¿Í RAMÀº ¸Å¿ì ºü¸£°í ½ÎÁö°í ÀÖÀ¸¹Ç·Î, ¾î¶² ¶§´Â
Çϵå¿þ¾î¿¡ ¸¹Àº µ·À» ÅõÀÚÇϰí, °³¹ßÀ» À§Çؼ´Â script ¾ð¾î¸¦ ¾²´Â °ÍÀÌ
ÁÁÀ» ¼öµµ ÀÖ´Ù.
PIKE & PHP (C/C++ Scripting Languages)
PHP³ª PIKE °°Àº ½ºÅ©¸³Æ® ¾ð¾î´Â ¸µÅ·°ú ÀçÄÄÆÄÀÏ °úÁ¤À» ¾ø¾Ý°í,
µû¶ó¼ °³¹ß °úÁ¤À» ´ÜÃà½Ãų ¼ö ÀÖ´Ù.
¸Þ¸ð¸®(RAM) °¡°ÝÀÌ ¶³¾îÁö°í, CPU ¼Óµµ°¡ ¿Ã¶ó°¨¿¡ µû¶ó
PHP³ª PIKE°°Àº ½ºÅ©¸³Æ® ¾ð¾îÀÇ Àαâ´Â Æø¹ßÇÒ °ÍÀÌ´Ù.
PHP³ª PIKE´Â °´Ã¼ÁöÇâ°ú C/C++À» ´àÀº ¹®¹ýÀ¸·Î ÀÎÇØ °¡Àå ³Î¸® ¾²ÀÌ´Â ½ºÅ©¸³Æ®
¾ð¾î°¡ µÉ °ÍÀÌ´Ù.
PHP³ª Pike C++ ½ºÅ©¸³Æ® ¾ð¾î¸¦ ¾¸À¸·Î½á ÇÁ·Î±×·¡¹ÖÀÇ »ý»ê¼ºÀº
´Ù¼¸ ¹è ³ª Áõ°¡ÇÒ °ÍÀÌ´Ù.
±×¸®°í PHP³ª PIKE´Â '°³³äÀÇ Áõ¸í'À» À§ÇØ À¯¿ëÇϰí, ÇÁ·ÎÅäŸÀÔÀ» ºü¸£°Ô ¸¸µé¾î³¾
¼ö ÀÖ´Ù.
PHP´Â ÀϹÝÀûÀÎ ÇÁ·Î±×·¡¹ÖÀ̳ª À¥ ÇÁ·Î±×·¡¹Ö¿¡¼ ¸Å¿ì Àα⸦ ¾ò°í ÀÖ´Ù.
PHP´Â °¡±î¿î ¹Ì·¡¿¡ °¡Àå ³Î¸® ¾²ÀÌ´Â ½ºÅ©¸³Æ® ¾ð¾î°¡ µÉ °ÍÀÌ´Ù.
PHP ´Â http://www.linuxdoc.org/HOWTO/PHP-HOWTO.html ( Çѱ۹ø¿ª )
¿¡ ÀÖ´Ù.
The Pike ´Â http://pike.roxen.com ¿Í http://www.roxen.com ¿¡ ÀÖ´Ù.
Roxen À¥¼¹ö´Â ¼ø¼öÇÏ°Ô Pike·Î ¾²¿©Á®¼, ¾ó¸¶³ª Pike°¡ °·ÂÇÑÁö º¸¿©ÁÖ°í ÀÖ´Ù.
Pike´Â ¸î¸î ÀÛ¾÷¿¡ ´ëÇØ¼´Â Javaº¸´Ù ºü¸£°Ô µ¹¾Æ°¡°í, ¸Þ¸ð¸®µµ »ó´çÈ÷
È¿À²ÀûÀ¸·Î »ç¿ëÇÑ´Ù.
SoftIntegration Ch (C/C++ ½ºÅ©¸³Æ® ¾ð¾î)
¸¸¾à »ó¿ë ½ºÅ©¸³Æ® ¾ð¾î¸¦ ¿øÇÑ´Ù¸é,
SoftIntegration corporation ( http://www.softintegration.com ) ¿¡¼ 'Ch scripting'À» º¸¾Æ¶ó.
Ch¶ó ºÒ¸®´Â ½ºÅ©¸³Æ® ¾ð¾î ȯ°æÀº C¸¦ Æ÷ÇÔÇϰí, ³ôÀº ¼öÁØÀÇ È®Àåµé°ú
C++À» ºñ·ÔÇÑ ´Ù¸¥ ¾ð¾îµéÀÇ Æ¯Â¡µéÀ» Æ÷ÇÔÇÑ´Ù. µû¶ó¼ Çѹø ¹è¿ì±â¸¸ Çϸé
°ÅÀÇ ¸ðµç Á¾·ùÀÇ ÇÁ·Î±×·¡¹Ö¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÀÌ Cȣȯ ½ºÅ©¸³Æ® ¾ð¾î ȯ°æÀº ¿©·¯ Ç÷§Æû¿¡¼ ÇÑ ÇÁ·Î±×·¥À» À̽İ¡´ÉÇϰÔ
ÇÏ´Â Áß°£ ¿ªÇÒÀ» ÇÑ´Ù.
À̽İ¡´ÉÇÑ Ch ÄÚµå´Â ÀÎÅͳݰú ÀÎÆ®¶ó³ÝÀ» ÅëÇØ ½´ÆÛÄÄÇ»ÅͺÎÅÍ ¿÷½ºÅ×À̼Ç,
PC, ÆÊ(Palm), PDA ¸¦ ºñ·Ô ÄÄÇ»ÅÍÀÇ ¹üÁÖ¿¡ ¼ÓÇÏÁö ¾Ê´Â CNC ¸Ó½Å, ·Îº¿,
TV, ³ÃÀå°í µî À¸·Î ÆÛÁ® ¾îµð¼³ª ¾ÈÀüÇÏ°Ô µ¹¾Æ°¥ ¼ö ÀÖ´Ù.
PHP (C++ Scripting Language)
PHP´Â À¥¹®¼¸¦ ó¸®ÇÏ´Â ½ºÅ©¸³Æ® ¾ð¾î·Î ¸Å¿ì ºü¸£°Ô ÁøÈÇß°í, °´Ã¼ÁöÇâÀ»
Áö¿øÇÑ´Ù. PHP´Â 'class'¶ó´Â Ű¿öµå¸¦ °¡Áö°í °´Ã¼ÁöÇâ ½ºÅ©¸³ÆÃÀ» ±¸ÇöÇϰíÀÚ Çß´Ù.
¾Æ¸¶µµ °¡±î¿î ½ÃÀϳ»¿¡ PHP´Â °´Ã¼ ÁöÇâ ÇÁ·ÎÁ§Æ®¸¦ À§ÇÑ °·ÂÇÑ ½ºÅ©¸³Æ® ¾ð¾î·Î
ºü¸£°Ô ÁøÈÇÒ °ÍÀÌ´Ù. °¡±î¿î ¹Ì·¡¿¡ PHP´Â À¥ÇÁ·Î±×·¡¹Ö »Ó ¾Æ´Ï¶ó ÀϹÝÀûÀÎ
¾îÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¡¹Ö¿¡µµ ¾²ÀÌ°Ô µÉ °ÍÀÌ´Ù.
À¥°ú ÀÏ¹Ý ¾îÇø®ÄÉÀ̼ǿ¡ ´Ù¸¥ ¾ð¾î¸¦ ¾²±â º¸´Ù´Â ±×³É PHP¸¸ ¾²¸é µÉ °ÍÀ̱â
¶§¹®ÀÌ´Ù. PHP HOWTO :
http://www.linuxdoc.org/HOWTO/PHP-HOWTO.html ( Çѱ۹ø¿ª .
Templates
Template ´Â ÄÚµå Àç»ç¿ëÀ» ½±°Ô ¸¸µé¾î generic ÇÁ·Î±×·¡¹ÖÀ» °¡´ÉÇÏ°Ô ÇÏ´Â C++ÀÇ Æ¯Â¡ÀÌ´Ù.
¾Æ·¡¿Í °°Àº °£´ÜÇÑ ¿¹¸¦ º¸ÀÚ :
#include <string>
#include <iostream>
void printstring(const std::string& str) {
std::cout << str << std::endl;
}
int main()
{
std::string str("Hello World");
printstring(str);
}
printstring() ´Â std::string
¸¦ ù¹øÂ° ÀÎÀÚ·Î ¹Þ´Â´Ù. µû¶ó¼ ÀÌ´Â ¿ÀÁ÷ string¸¸ ÇÁ¸°Æ® ÇÒ ¼ö ÀÖ°í,
¹®ÀÚ¹è¿(char array)À» ÇÁ¸°Æ® Çϱâ À§Çؼ´Â ÇÔ¼ö¸¦ ¿À¹ö·Îµù½ÃŰµç°¡
»õ·Î¿î À̸§ÀÇ ÇÔ¼ö¸¦ ¸¸µé¾î¾ß ÇÑ´Ù.
ÀÌ´Â ÇÔ¼öÀÇ ±¸ÇöÀÌ Áߺ¹µÇ¹Ç·Î ÁÁÁö ¾ÊÀº °ÍÀ̰í,
À¯Áöº¸¼öÇϱⰡ Èûµé¾îÁö°Ô µÈ´Ù.
templateÀ» ¾²¸é ¿ì¸®´Â Äڵ带 Àç»ç¿ë°¡´ÉÇÏ°Ô ¸¸µé ¼ö ÀÖ´Ù.
¾Æ·¡¿Í °°Àº ÇÔ¼ö¸¦ º¸¶ó :
template<typename T>
void print(const T& var) {
std::cout << var << std::endl;
}
ÄÄÆÄÀÏ·¯´Â ¿ì¸®°¡ ¹«½¼ ŸÀÔÀ» ³Ñ°ÜÁÖµçÁö ¾Ë¾Æ¼ print
ÇÔ¼öÀÇ Äڵ带 ÀÚµ¿À¸·Î ¸¸µé¾î ÁÙ °ÍÀÌ´Ù.
À̰ÍÀÌ templateÀÇ Áß¿äÇÑ ÀåÁ¡ÀÌ´Ù.
Java´Â templateÀÌ ¾ø°í, µû¶ó¼ Java¿¡¼ÀÇ generic ÇÁ·Î±×·¡¹Ö°ú ÄÚµå Àç »ç¿ëÀº
´õ Èûµé´Ù.
·¹ÆÛ·±½º :
http://babbage.cs.qc.edu/STL_Docs/templates.htm
¹Ì·¯ : http://www.mike95.com/c_plusplus/tutorial/templates
À̰ÍÀº #pragma template¿¡ ´ëÇØ ¾Ë·ÁÁØ´Ù : -
http://www.dgp.toronto.edu/people/JamesStewart/270/9697f/notes/Nov25-tut.html
¸Å¿ì ÁÁÀº site:
http://www.cplusplus.com/doc/tutorial/tut5-1.html
http://www.cplusplus.com/doc/tutorial
C++ÀÇ °ËÁõÀ» À§ÇØ : http://examware.com ¿¡ °¡¼ "Tutorials"¸¦ Ŭ¸¯Çϰí C/C++ ¹öưÀ» ´©¸£½Ã¿À.
C++ Open books: http://www.softpanorama.org/Lang/cpp.shtml
tutorialÀ» Ŭ¸¯
Templates tutorial : http://www.infosys.tuwien.ac.at/Research/Component/tutorial/prwmain.htm
STL References
STL¿¡ °üÇÑ ´ÙÀ½ »çÀÌÆ®µéÀ» ¹æ¹®Çغ¸¶ó :
iterator¿¡ ´ëÇÑ ¸Å¿ì ÁÁÀº ¼³¸í
http://www.cs.trinity.edu/~joldham/1321/lectures/iterators/
Intro to STL SGI
http://www.sgi.com/tech/stl/stl_introduction.html
Mumits STL Ãʺ¸ °¡À̵å (¾à°£ ¿À·¡µÈ °Í)
http://www.xraylith.wisc.edu/~khan/software/stl/STL.newbie.html
ObjectSpace ¿¹Á¦ : ObjectSpace´Â 300°³°¡ ³Ñ´Â ¿¹Á¦¸¦ °¡Áö°í ÀÖ°í, µû¶ó¼
Ãʺ¸ÀÚ¿¡°Ô ¾ÆÁÖ ÁÁÀº Ãâ¹ßÁ¡À» Á¦½ÃÇØÁØ´Ù.
ftp://butler.hpl.hp.com/stl/examples.zip
Joseph Y. Laurino's STL page.
http://weber.u.washington.edu/~bytewave/bytewave_stl.html
Marian Corcoran's STL FAQ.
ftp://butler.hpl.hp.com/stl/stl.faq
STL tutorials:
Phil Ottewell's STL Tutorial - http://www.yrl.co.uk/~phil/stl/stl.htmlx
ÁÁÁö¸¸ ¿À·¡µÈ ¹®¼ - http://www.decompile.com/html/tut.html
¹Ì·¯ : http://mip.ups-tlse.fr/~grundman/stl-tutorial/tutorial.html
The Code Project, C++/STL/MFC ¿¡ ´ëÇÑ ¼Ò°³ http://www.codeproject.com/cpp/stlintroduction.asp
C++ Standard Template Library, another great tutorial, by Mark Sebern
http://www.msoe.edu/eecs/cese/resources/stl/index.htm
Technical University Vienna by Johannes Weidl http://dnaugler.cs.semo.edu/tutorials/stl
mirror http://www.infosys.tuwien.ac.at/Research/Component/tutorial/prwmain.htm
Main STL sites:
C++ STL from SGI http://www.sgi.com/tech/stl
C++ STL from RPI univ http://www.cs.rpi.edu/projects/STL/htdocs/stl.html
C++ STL site
ODP for STL
¿Í
¹Ì·¯
STL for C++ Programmers http://userwww.econ.hvu.nl/~ammeraal/stlcpp.html
C++ STL from halper http://www.halpernwightsoftware.com/stdlib-scratch/quickref.html
STL °³¿ä
STLÀº ÇÁ·Î±×·¡¸Ó¿¡°Ô ¸î°¡Áö À¯¿ëÇÑ µ¥ÀÌÅͱ¸Á¶¿Í ¾Ë°í¸®ÁòÀ» Á¦°øÇÑ´Ù.
ÀÌ´Â ´ÙÀ½°ú °°Àº °ÍµéÀÌ ÀÖ´Ù.
ÄÁÅ×À̳Ê. µÎ °¡Áö ŸÀÔÀÌ ÀÖ´Ù :
¼øÂ÷Àû(Sequential). ¿©±â¿¡´Â vector, list, deque µîÀÌ ÀÖ´Ù.
Á¤·ÄµÈ Á¶ÇÕ(Associative). ¿©±â¿¡´Â set, map, multiset, multimap ÀÌ ÀÖ´Ù.
Iterator. ÄÁÅ×À̳ÊÀÇ ³»¿ëÀ» »ìÆìº¼ ¼ö ÀÖ°Ô ÇØÁÖ´Â Æ÷ÀÎÅÍ °°Àº °ÍµéÀÌ´Ù.
ÀϹÝÀûÀÎ(generic) ¾Ë°í¸®Áòµé. STLÀº ÄÁÅ×ÀÌ³Ê Å¸ÀÔ¿¡ ´ëÇØ µ¿ÀÛÇÏ´Â
¿©·¯°¡Áö È¿°úÀûÀ¸·Î ±¸ÇöµÈ Ç¥ÁØ ¾Ë°í¸®Áòµé
(¿¹¸¦µé¾î find, sort, merge µî)ÀÌ ÀÖ´Ù.
(¸î¸î containerµéÀº ÀÌ Áß ÀϺθ¦ Ưº°ÇÑ ¸ñÀûÀ¸·Î ¸â¹öÇÔ¼ö·Î °®°í ÀÖ´Ù)
Function obejct. function object´Â operator()ÀÇ Á¤ÀǸ¦ Á¦°øÇÏ´Â classÀÇ instanceÀÌ´Ù.
ÀÌ´Â ÀÌ objectµéÀ» ÇÔ¼ö °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.
Adaptors. STLÀº ´ÙÀ½°ú °°Àº °ÍµéÀ» Á¦°øÇÑ´Ù.
Container adaptor´Â vector¸¦ stackÀ» ¸¸µé±â À§ÇÑ ±âÃÊ·Î »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù.
function adaptor ´Â ÀÌ¹Ì Á¸ÀçÇÏ´Â function object·ÎºÎÅÍ »õ·Î¿î function object¸¦
¸¸µé ¼ö ÀÖ°Ô ÇØÁØ´Ù.
Allocators. ¸ðµç STL ÄÁÅ×ÀÌ³Ê class´Â ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÏ´Â ¸Þ¸ð¸® Á¤º¸¸¦ °®°í ÀÖ±â À§ÇÑ
allocator class¸¦ »ç¿ëÇÑ´Ù. ÇÏÁö¸¸ ³ª´Â ÀÌ ºÎºÐÀº »ý·«ÇÒ °ÍÀÌ´Ù.
¾ÕÀ¸·Î vector, list, set ±×¸®°í map ÄÁÅ×À̳ÊÀÇ »ç¿ë¹ýÀ» »ìÆìº¼ °ÍÀÌ´Ù.
À̵éÀ» »ç¿ëÇϱâ À§Çؼ´Â ³»°¡ STL iterator¿¡ ´ëÇØ ¸»ÇÒ ¼ö ÀÖµµ·Ï
iterator¸¦ ¾µ ÁÙ ¾Ë¾Æ¾ß ÇÒ °ÍÀÌ´Ù. ¶Ç set°ú map ÄÁÅ×À̳ʸ¦ »ç¿ëÇÑ´Ù´Â °ÍÀº
³»°¡ function object¿¡ ´ëÇØ ¹º°¡ ¼³¸íÇÒ ¼ö ÀÖµµ·Ï °£´ÜÇÑ function object°¡
ÀÖ¾î¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù.
STLÀÌ Áö¿øÇÏ´Â ¾Ë°í¸®Áò¿¡ ´ëÇØ¼´Â °£´ÜÈ÷ ¼³¸íÇÒ °ÍÀ̰í, adoptor´Â
¾ð±ÞÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.
¸î¸î ÇÔ¼ö ÀÎÀÚÀÇ Å¸ÀÔ¿¡ ´ëÇØ¼ À̸§ÀÌ ¹Ù²ð ¼ö ÀÖ´Ù. ¿¹¸¦µé¾î ´ëºÎºÐÀÇ int
ŸÀÔ ÀÎÀÚµéÀº ½ÇÁ¦·Î´Â size_typeÀ̶ó´Â typeÀ» °®°í À̰ÍÀÌ ÀûÀýÇÑ
±âº» ŸÀÔÀ¸·Î tyepdefµÇ´Â ÇüÅ¿¡ ÀÇÇØ ¾²ÀδÙ. ¸¸¾à ¿©·¯ ÇÔ¼öµéÀÇ ½ÇÁ¦
ÀÎÀÚ Å¸ÀÔÀ» ¾Ë°í½Í´Ù¸é ÀÛ¾÷ÇÏ´Â °Í¿¡ ´ëÇÑ ¹®¼³ª Çì´õÆÄÀÏÀ» Âü°íÇØ¶ó.
STL¿¡¼ Á¦°øµÇ´Â ¸î°¡Áö À¯Æ¿¸®Æ¼ classµéÀÌ Àִµ¥, ÀÌ Áß Á¦ÀÏ Áß¿äÇÑ °ÍÀº
pair classÀÌ´Ù. ÀÌ´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾîÀÖ´Ù.
template<class T1, class T2>
class pair {
public:
T1 first;
T2 second;
pair(const T1& a, const T2& b) : first(a), second(b) {}
};
±×¸®°í ½±°Ô pair¸¦ ¸¸µéµµ·Ï ´ÙÀ½°ú °°Àº make_pair ÇÔ¼ö°¡ Á¦°øµÈ´Ù :
pair<T1,T2> make_pair(const T1& f, const T2&,s)
¶ÇÇÑ ==¿Í < ¿¬»êÀÚµµ ÀÖ´Ù. ÀÌ template class¿¡´Â º¹ÀâÇÑ °ÍÀÌ ¾ø°í
±×³É »ç¿ëÇÏ¸é µÈ´Ù. À̸¦ ÀÌ¿ëÇϱâ À§Çؼ´Â #include ·Î <utility>¸¦
includeÇÏ¸é µÈ´Ù. pair´Â ¿©·¯°÷¿¡¼ ¾²ÀÏ ¼ö Àִµ¥, ƯÈ÷ set°ú map class¿¡¼
¸¹ÀÌ ³ªÅ¸³´Ù.
Çì´õ ÆÄÀÏ
STLÀ» »ç¿ëÇϱâ À§Çؼ´Â ÀûÀýÇÏ°Ô Çì´õÆÄÀÏÀ» #include ÇØÁÖ¾î¾ß ÇÑ´Ù.
¸¸¾à ÄÄÆÄÀÏ·¯°¡ Ç¥ÁØ¿¡ ¸ÂÁö ¾Ê´Â´Ù¸é ¾à°£ ´Ù¸¦ ¼öµµ ÀÖÁö¸¸,
Ç¥ÁØ¿¡ ¸Â´Â ÄÄÆÄÀÏ·¯ (g++ °°Àº)´Â ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù :
<vector> : º¤ÅÍ Å¸ÀÔ
<list> : ¸®½ºÆ® ŸÀÔ
<set> : ÁýÇÕ(set) ŸÀÔ
<map> : ¸Ê ŸÀÔ
<algorithm> : ÀϹÝÀûÀÎ ¾Ë°í¸®Áò µé
Ç¥ÁØ C++ ¶óÀ̺귯¸®´Â .h ¸¦ µÚ¿¡ ºÙÀÌÁö ¾Ê´Â ´Ù´Â °Í¿¡
ÁÖÀÇÇØ¶ó. ¸¸¾à ¿¾¹öÀüÀÇ È¤Àº ÁÁÁö ¾ÊÀº ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇϴµ¥, À§¿Í °°ÀÌ ÇØ¼ include°¡
µÇÁö ¾Ê´Â´Ù¸é .h¸¦ ºÙ¿©¼ ½ÃµµÇغ¸¾Æ¶ó.
ÇÏÁö¸¸ ±×º¸´Ù´Â »õ·Î¿î ÄÄÆÄÀÏ·¯¸¦ ±¸ÇÏ´Â °Ô ´õ ³ªÀ» °ÍÀÌ´Ù.
ÄÁÅ×ÀÌ³Ê class ÀÎÅÍÆäÀ̽º
ÄÁÅ×ÀÌ³Ê classµéÀº ¼·Î °°Àº À̸§À» °®´Â ¸â¹öÇÔ¼ö¸¦ ¸¹ÀÌ °®´Â´Ù.
ÀÌ ÇÔ¼öµéÀº ¸ðµç class¿¡ ´ëÇØ ¶È°°Àº (ȤÀº ¸Å¿ì ºñ½ÁÇÑ) ÀÎÅÍÆäÀ̽º¸¦
Á¦°øÇÑ´Ù (±×·¯³ª ¹°·Ð ±× ³»ºÎ ±¸ÇöÀº ´Ù¸¦ °ÍÀÌ´Ù). ¾Æ·¡ÀÇ Ç¥´Â
¿ì¸®°¡ »ìÆìº¼ ÇÔ¼öµéÀ» ³ª¿ÇÑ °ÍÀÌ´Ù.
º°Ç¥´Â ±× ÄÁÅ×ÀÌ³Ê Å¸ÀÔÀÌ ±× À̸§ÀÇ ¸â¹ö ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù´Â °ÍÀÌ´Ù.
ÄÁÅ×ÀÌ³Ê Class ÀÎÅÍÆäÀ̽º
¿¬»êÀÚ/ÇÔ¼ö¸í
¸ñÀû
vector
list
set
map
==
ºñ±³
*
*
*
*
<
ºñ±³
*
*
*
*
begin
iterator
*
*
*
*
end
iterator
*
*
*
*
size
¿ø¼ÒÀÇ ¼ö
*
*
*
*
empty
ºñ¾ú´ÂÁö
*
*
*
*
front
ù¹øÂ° ¿ø¼Ò
*
*
back
¸¶Áö¸· ¿ø¼Ò
*
*
[ ]
¿ø¼Ò Á¢±Ù ¹× º¯°æ
*
*
insert
¿ø¼Ò(µé) Ãß°¡
*
*
*
*
push_back
¸Ç µÚ¿¡ ¿ø¼Ò Ãß°¡
*
*
push_front
¸Ç ¾Õ¿¡ ¿ø¼Ò Ãß°¡
*
erase
¿ø¼Ò(µé) »èÁ¦
*
*
*
*
pop_back
¸Ç µÚ ¿ø¼Ò »èÁ¦
*
*
pop_front
¸Ç ¾Õ ¿ø¼Ò »èÁ¦
*
¸¸¾à ¾Æ·¡ÀÇ ³»¿ëÁß Àǹ®°¡´Â ºÎºÐÀÌ ÀÖÀ¸¸é (¾Æ¸¶µµ ÀÕÀ» °ÍÀÌ´Ù),
Á¶±×¸¸ Å×½ºÆ® ÇÁ·Î±×·¥À» Çϳª Â¥¼ ¾î¶»°Ô µ¹¾Æ°¡´Â Áö ¾Ë¾Æº¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
º¤ÅÍ : Vectors
º¤ÅÍ´Â C++ÀÇ ¹è¿°ú ºñ½ÁÇÑ, ÇÏÁö¸¸ À̸¦ ¹ßÀü½ÃŲ ÄÁÅ×À̳ÊÀÌ´Ù.
ƯÈ÷, º¤ÅÍ´Â ¼±¾ð½Ã¿¡ ¾ó¸¶³ª º¤ÅͰ¡ Ä¿¾ßÇÒÁö¸¦ ¾Ë Çʿ䰡 ¾ø°í,
push_back
ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ¾ðÁ¦³ª »õ·Î¿î ¿ø¼Ò¸¦ Ãß°¡ÇÒ ¼ö ÀÖ´Ù.
( »ç½Ç insert
ÇÔ¼ö°¡ ¾îµð¿¡µç »õ ¿ø¼ÒµéÀ» ³ÖÀ» ¼ö ÀÖ°Ô ÇØÁÖÁö¸¸, ÀÌ´Â ¸Å¿ì ºñÈ¿À²ÀûÀÌ´Ù.
¸¸¾à À̸¦ ÀÚÁÖ ÇØ¾ßÇÑ´Ù¸é list¸¦ ´ë½Å »ç¿ëÇÏ´Â °ÍÀ» °í·ÁÇØº¸¾Æ¶ó. )
º¤ÅÍ ¸¸µé±â
º¤ÅÍ´Â class templateÀ̹ǷÎ, ¼±¾ð½Ã¿¡ º¤ÅͰ¡ °®°Ô µÉ
°´Ã¼ÀÇ Å¸ÀÔÀ» ¼±¾ðÇØÁÖ¾î¾ß ÇÑ´Ù. ¿¹¸¦µé¾î ´ÙÀ½°ú °°´Ù.
vector<int> v1;
vector<string> v2;
vector<FiniteAutomaton> v3;
À§ ³»¿ëÀº v1À» int °ªÀ» °®´Â º¤ÅÍ·Î, v2¸¦ stringÀ» °®´Â º¤ÅÍ·Î, v3¸¦
FiniteAutomaton (¾Æ¸¶µµ ¹Ì¸® ÀÌ·± ŸÀÔÀÌ ¼±¾ðµÇ¾úÀ» °ÍÀÌ´Ù) ¸¦ °®°í ÀÖ´Â
º¤ÅÍ·Î ¼±¾ðÇÑ´Ù.
ÀÌ ¼±¾ðµéÀº º¤ÅÍÀÇ Å©±â¿¡ ´ëÇØ ÀüÇô ¾Ë·ÁÁÖÁö ¾Ê°í
( ±¸Çö¿¡ µû¶ó ±âº» º¤ÅÍ »çÀÌÁî°¡ ÀÖÀ» °ÍÀÌ´Ù. )
, Çʿ信 µû¶ó ¾ó¸¶µçÁö ´Ã·Á¼ ¾µ ¼ö ÀÖ´Ù.
±×·¯³ª ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÔÀ¸·Î½á Ãʱâ Å©±â¸¦ Á¤ÇØÁÙ ¼öµµ ÀÖ´Ù.
vector<char> v4(26);
ÀÌ´Â v4°¡ ¹®ÀÚ(char)ÀÇ º¤ÅͰ¡ µÇ°í, óÀ½¿¡´Â 26°³ÀÇ ±ÛÀÚ¸¦ °¡Áú ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.
¶ÇÇÑ, º¤ÅÍ ¾È¿¡ µé¾î°¡´Â ¼öµéÀ» ÃʱâÈ ÇÏ´Â ¹æ¹ýµµ Àִµ¥, ÀÌ´Â ´ÙÀ½°ú °°´Ù.
vector<float> v5(100,1.0);
À§ ¼±¾ðÀº v5 °¡ 100°³ÀÇ 1.0À¸·Î ÃʱâÈ µÈ ½Ç¼ö°ªÀ»
°®´Â º¤ÅÍÀÓÀ» ¼±¾ðÇÑ´Ù.
º¤Å͸¦ üũÇϱâ
Çѹø º¤Å͸¦ ¸¸µç ÈÄ¿¡´Â, size ÇÔ¼ö¸¦ ½á¼ ÇöÀç
º¤ÅÍÀÇ Å©±â¸¦ ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù.
ÀÌ ÇÔ¼ö´Â ¾Æ¹« ÀÎÀÚ ¾øÀÌ º¤ÅÍ¿¡ µé¾îÀÖ´Â ¿ø¼Ò ¼ö¸¦ ³ªÅ¸³»´Â integer¸¦ ¸®ÅÏÇÑ´Ù.
( ¾ö¹ÐÇÏ°Ô ¸»ÇÏÀÚ¸é
size_type ŸÀÔÀÌ ¸®ÅϵÇÁö¸¸,
À̰ÍÀÌ ¹Ù·Î integer·Î ¹Ù²î¾îÁø´Ù )
±×·¸´Ù¸é ´ÙÀ½ÀÇ ÀÛÀº ÇÁ·Î±×·¥À¸·Î ¹«¾ùÀÌ Ãâ·ÂµÉ±î?
<vector-size.cpp>=
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v1;
vector<int> v2(10);
vector<int> v3(10,7);
cout << "v1.size() returns " << v1.size() << endl;
cout << "v2.size() returns " << v2.size() << endl;
cout << "v3.size() returns " << v3.size() << endl;
}
º¤ÅͰ¡ ºñ¾ú´ÂÁö¸¦ üũÇϱâ À§Çؼ´Â, empty ÇÔ¼ö¸¦ ¾²¸é µÈ´Ù.
À̰͵µ ¿ª½Ã ¾Æ¹« ÀÎÀÚ ¾øÀÌ boolean °ªÀ» ¸®ÅÏÇϴµ¥, ºñ¾îÀÖÀ¸¸é true¸¦,
ºñ¾îÀÖÁö ¾ÊÀ¸¸é false¸¦ ¸®ÅÏÇÑ´Ù.
±×·¸´Ù¸é ´ÙÀ½ÀÇ ÇÁ·Î±×·¥Àº ¹«¾ùÀ» ÇÁ¸°Æ®ÇÒ±î (true´Â 1·Î, false´Â 0À¸·Î ÇÁ¸°Æ®µÈ´Ù)?
<vector-empty.cpp>=
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v1;
vector<int> v2(10);
vector<int> v3(10,7);
cout << "v1.empty() has value " << v1.empty() << endl;
cout << "v2.empty() has value " << v2.empty() << endl;
cout << "v3.empty() has value " << v3.empty() << endl;
}
º¤ÅÍÀÇ ¿ø¼Ò¿¡ Á¢±ÙÇϱâ
º¤ÅÍÀÇ ¿ø¼Ò´Â []¿¬»êÀÚ¸¦ »ç¿ëÇØ¼ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. µû¶ó¼ ¸ðµç
¿ø¼Ò¸¦ ÇÁ¸°Æ®ÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù.
vector<int> v;
// ...
for (int i=0; i<v.size(); i++)
cout << v[i];
(ÀÌ´Â ¿ø·¡ÀÇ ¹è¿À» »ç¿ëÇÏ´Â °Í°ú ¸Å¿ì ºñ½ÁÇÏ´Ù).
¶ÇÇÑ, [] ¿¬»êÀÚ´Â º¤ÅÍ ¿ø¼ÒÀÇ °ªÀ» ¹Ù²Ù±â À§Çؼµµ ¾²ÀÏ ¼ö ÀÖ´Ù.
vector<int> v;
// ...
for (int i=0; i<v.size(); i++)
v[i] = 2*i;
front ÇÔ¼ö´Â º¤ÅÍÀÇ Ã¹¹øÂ° ¿ø¼Ò¸¦ ¸®ÅÏÇÑ´Ù.
vector<char> v(10,'a');
// ...
char ch = v.front();
¶ÇÇÑ, front¸¦ ÀÌ¿ëÇØ¼ ù¹øÂ° ¿ø¼ÒÀÇ °ªÀ» ¹Ù²Ü ¼öµµ ÀÖ´Ù.
vector<char> v(10,'a');
// ...
v.front() = 'b';
back ÇÔ¼ö´Â front¿Í °°Àº ¿ªÇÒÀ» ÇÏÁö¸¸, º¤ÅÍÀÇ ¸Ç ¸¶Áö¸· ¿ø¼Ò¸¦ ¸®ÅÏÇÏ´Â °ÍÀÌ
´Ù¸£´Ù.
vector<char> v(10,'z');
// ...
char last = v.back();
v.back() = 'a';
[]¸¦ »ç¿ëÇÏ´Â °£´ÜÇÑ ¿¹Á¦¸¦ º¸ÀÚ.
<vector-access.cpp>=
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> v1(5);
int x;
cout << "Enter 5 integers (seperated by spaces):" << endl;
for (int i=0; i<5; i++)
cin >> v1[i];
cout << "You entered:" << endl;
for (int i=0; i<5; i++)
cout << v1[i] << ' ';
cout << endl;
}
º¤ÅÍÀÇ ¿ø¼Ò¸¦ Ãß°¡ / »èÁ¦Çϱâ
À§¿¡ ¾ð±ÞµÈ [] ¿Ü¿¡µµ, º¤ÅÍÀÇ ¿ø¼Ò¿¡ Á¢±ÙÇϰųª ¹Ù²Ü ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¸î°¡Áö ´õ ÀÖ´Ù.
push_backÀº »õ·Î¿î ¿ø¼Ò¸¦ º¤ÅÍÀÇ ³¡¿¡ ´õÇÒ °ÍÀÌ´Ù.
pop_backÀº º¤ÅÍÀÇ ³¡¿¡¼ ¿ø¼Ò¸¦ Çϳª ¾ø¾Ù °ÍÀÌ´Ù.
insert ´Â Çϳª ¶Ç´Â ¿©·¯°³ÀÇ ¿ø¼Ò¸¦ º¤ÅÍÀÇ ¿øÇÏ´Â À§Ä¡¿¡ »ðÀÔÇÒ °ÍÀÌ´Ù.
erase´Â Çϳª ¶Ç´Â ¿©·¯°³ÀÇ ¿ø¼Ò¸¦ ¿øÇÏ´Â À§Ä¡¿¡¼ ¾ø¾Ù °ÍÀÌ´Ù.
±×·±µ¥ insert³ª erase´Â º¤ÅÍ¿¡¼ ¿À¹öÇìµå°¡ Å« ¿¬»êÀÓ¿¡ ÁÖÀÇÇ϶ó. ¸¸¾à insert³ª erase¸¦
½á¾ßÇÑ´Ù¸é, º¤ÅÍ ´ë½Å list µ¥ÀÌÅͱ¸Á¶¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ´õ È¿À²ÀûÀÏ °ÍÀÌ´Ù.
<vector-mod.cpp>=
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v;
for (int i=0; i<10; i++) v.push_back(i);
cout << "Vector initialised to:" << endl;
for (int i=0; i<10; i++) cout << v[i] << ' ' ;
cout << endl;
for (int i=0; i<3; i++) v.pop_back();
cout << "Vector length now: " << v.size() << endl;
cout << "It contains:" << endl;
for (int i=0; i<v.size(); i++) cout << v[i] << ' ';
cout << endl;
int a1[5];
for (int i=0; i<5; i++) a1[i] = 100;
v.insert(& v[3], & a1[0],& a1[3]);
cout << "Vector now contains:" << endl;
for (int i=0; i<v.size(); i++) cout << v[i] << ' ';
cout << endl;
v.erase(& v[4],& v[7]);
cout << "Vector now contains:" << endl;
for (int i=0; i<v.size(); i++) cout << v[i] << ' ';
cout << endl;
}
À§ÀÇ ¿¹¿¡¼´Â º¤ÅÍ v°¡ ¼±¾ðµÈ ÈÄ, push_backÀ» »ç¿ëÇÏ¿© ÃʱâÈ µÇ¾ú´Ù.
±×¸®°í pop_backÀ¸·Î µÚÀÇ ¸î ¿ø¼Ò°¡ ¾ø¾îÁ³°í,
¹è¿ÀÌ Çϳª ¸¸µé¾îÁ®¼ ±× ³»¿ëÀÌ insert¸¦ »ç¿ëÇØ¼ v¿¡ »ðÀԵǾú´Ù.
¸¶Áö¸·À¸·Î ¸î¸î ¿ø¼ÒµéÀ» Áö¿ì±â À§ÇØ erase°¡ »ç¿ëµÇ¾ú´Ù.
À§¿¡ »ç¿ëµÈ ÇÔ¼öµéÀº ´ÙÀ½°ú °°Àº ÀÎÀÚµéÀ» ¹Þ´Â´Ù.
push_back : vector¿¡ µé¾î°¡´Â °Í°ú °°Àº ŸÀÔÀÇ ÀÎÀÚ¸¦ Çϳª ¹Þ´Â´Ù.
pop_back : ÀÎÀÚ¸¦ ¹ÞÁö ¾Ê´Â´Ù. ±×¸®°í ºó º¤ÅÍ¿¡ ´ëÇØ pop_backÀ» ÇÏ¸é ¾ÈµÈ´Ù.
insert ´Â ¼¼ °¡Áö ÇüÅ·Π¾²ÀδÙ.
insert(pos, T& x) : ¿ø¼Ò x Çϳª¸¦ pos°¡ °¡¸®Å°´Â À§Ä¡¿¡ »ðÀÔÇÑ´Ù.
insert(pos, start, end) : ´Ù¸¥ ÄÁÅ×ÀÌ³Ê ¾ÈÀÇ ³»¿ëÀ» pos°¡ °¡¸®Å°´Â À§Ä¡¿¡ »ðÀÔÇÑ´Ù.
»ðÀԵǴ ¿ø¼ÒµéÀº start¿¡¼ ½ÃÀÛÇØ¼, end¸¦ ¸¸³¯ ¶§±îÁö (end°¡ °¡¸®Å°´Â °ÍÀº µé¾î°¡Áö ¾Ê´Â´Ù) ÀÌ´Ù.
insert(pos, int rep, T& x) : rep °³ÀÇ x°ªÀ» pos À§Ä¡¿¡ »ðÀÔÇÑ´Ù. (°°Àº °ªÀ» ¿©·¯¹ø »ðÀÔ)
À§ÀÇ Äڵ忡 ³ª¿ÍÀÖµíÀÌ, pos°¡ °¡¸®Å°´Â Æ÷Áö¼Ç °ªÀº ¿ø¼Ò°¡ »ðÀ﵃ °÷ÀÇ ÁÖ¼Ò¿©¾ß ÇÑ´Ù.
¸¶Âù°¡Áö·Î start¿Í endµµ ÁÖ¼Ò°ªÀ̾î¾ß ÇÑ´Ù. (»ç½Ç À̰ÍÀº À̵éÀÌ iteratorÀ̱⠶§¹®ÀÌ´Ù.
ÀÌ¿¡ ´ëÇØ¼´Â ´ÙÀ½ Àå¿¡¼ ´õ »ìÆìº¼ °ÍÀÌ´Ù.)
erase´Â µÎ °¡Áö ÇüÅ·Π¾²Àδ٠(pos, start¿Í end´Â insert¿Í °°Àº Çü½ÄÀ» °®´Â´Ù)
erase(pos) : pos°¡ °¡¸®Å°´Â À§Ä¡ÀÇ ¿ø¼Ò¸¦ ¾ø¾Ø´Ù.
erase(start,end) : start¿¡¼ end±îÁö(end´Â Æ÷ÇÔÇÏÁö ¾ÊÀ½)¿¡ ÇØ´çÇÏ´Â ¿ø¼ÒµéÀ» ¾ø¾Ø´Ù.
Vector Iterator
º¤ÅÍ vÀÇ ¿ø¼ÒµéÀ» Â÷·Ê´ë·Î º¸´Â °¡Àå ½¬¿î ¹æ¹ýÀº À§¿¡ ÇÑ ¹æ¹ý°°ÀÌ ÇÏ´Â °ÍÀÌ´Ù.
for (int i=0; i<v.size(); i++) { ... v[i] ... }
¶Ç´Ù¸¥ ¹æ¹ýÀº ¹Ù·Î iterator¸¦ ÀÌ¿ëÇÏ´Â °ÍÀÌ´Ù. iterator´Â ÄÁÅ×À̳ÊÀÇ Æ÷ÀÎÅͶó°í »ý°¢Çϸé
µÈ´Ù. µû¶ó¼ À̸¦ Áõ°¡½ÃŰ¸é¼ ¿ø¼Ò¸¦ Çϳª¾¿ Á¢±ÙÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù.
º¤ÅͰ¡ ¾Æ´Ñ ÄÁÅ×À̳ÊÀÇ °æ¿ì´Â iterator°¡ ¿ø¼Ò¸¦ Â÷·Ê´ë·Î Á¢±ÙÇÒ ¼ö ÀÖ´Â À¯ÀÏÇÑ ¹æ¹ýÀÌ´Ù.
type TÀÇ ¿ø¼Ò¸¦ °®°í ÀÖ´Â º¤ÅÍÀÇ °æ¿ì :
vector<T> v;
iterator´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÈ´Ù.
vector<T>::iterator i;
ÀÌ·¯ÇÑ iterator´Â begin()À̳ª end()°°Àº ÇÔ¼ö¿¡ ÀÇÇØ ¸®ÅϵǴ °ªÀ¸·Î ¸¸µé¾îÁø´Ù.
°°Àº ŸÀÔÀÇ iteratorµéÀº == ³ª != ·Î ºñ±³°¡´ÉÇϰí, ++À» ÀÌ¿ëÇÑ Áõ°¡³ª *¸¦ ÀÌ¿ëÇÑ
ÂüÁ¶ µîÀÌ °¡´ÉÇÏ´Ù.
[ ÀÌ ¿Ü¿¡µµ º¤ÅÍ iterator´Â ´õ ¸¹Àº ¿¬»êÀÚ¸¦ °®°í ÀÖ´Ù. ÀÌ¿¡ ´ëÇØ¼´Â ´ÙÀ½ ÀåÀ» Âü°íÇØ¶ó ].
´ÙÀ½Àº iterator¸¦ ¾î¶»°Ô º¤ÅÍ¿Í »ç¿ëÇÏ´Â Áö¿¡ ´ëÇÑ ¿¹Á¦ÀÌ´Ù.
<vector-iterator.cpp>=
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v(10);
int j = 1;
vector<int>::iterator i;
// v¸¦ 1¿¡¼ 10±îÁöÀÇ Á¤¼ö·Î ä¿î´Ù.
i = v.begin();
while (i != v.end())
{
*i = j;
j++;
i++;
}
// vÀÇ °¢ ¿ø¼Ò¸¦ Á¦°öÇÑ´Ù.
for (i=v.begin(); i!=v.end(); i++) *i = (*i) * (*i);
// vÀÇ ³»¿ëÀ» Ãâ·ÂÇÑ´Ù.
cout << "The vector v contains: ";
for (i=v.begin(); i!=v.end(); i++) cout << *i << ' ';
cout << endl;
}
*i °¡ µîÈ£ÀÇ ¿ÞÂÊ(LHS)¿¡¼´Â °ªÀ» º¯°æÇϱâ À§ÇØ, ¿À¸¥ÂÊ(RHS)¿¡¼´Â °ªÀ» ÂüÁ¶Çϱâ À§ÇØ
¾²ÀÎ °Í¿¡ ÁÖ¸ñÇØ¶ó.
º¤ÅÍÀÇ ºñ±³
µÎ °³ÀÇ º¤Å͸¦ ==¿Í <¸¦ ÀÌ¿ëÇØ¼ ºñ±³ÇÒ ¼ö ÀÖ´Ù. ==´Â ¾ç ÂÊÀÇ º¤ÅͰ¡ °°Àº ¼öÀÇ
¿ø¼Ò¸¦ °®°í ´ëÀÀµÇ´Â °¢¿ø¼ÒµéÀÌ ¸ðµÎ °°À» ¶§ true¸¦ ¸®ÅÏÇÒ °ÍÀÌ´Ù.
<Àº µÎ º¤ÅÍÀÇ ¿ø¼ÒµéÀ» Â÷·Ê´ë·Î »çÀü¼ø¼(lexicographical order)´ë·Î ºñ±³ÇÑ´Ù.
¿¹¸¦µé¾î v1°ú v2¸¦ ºñ±³ÇÑ´Ù°í ÇØº¸ÀÚ (v1 < v2).
i=0À̶ó ÇÒ ¶§, v1[i] < v2[i] À̸é true¸¦ ¸®ÅÏÇϰí, v1[i] >
v2[i] À̸é false¸¦ ¸®ÅÏÇÑ´Ù. ¸¸¾à µÑÀÌ °°À¸¸é i¸¦ Áõ°¡½ÃŲ´Ù (Áï, ´ÙÀ½ ¿ø¼Ò·Î ³Ñ¾î°£´Ù). ¸¸¾à v1ÀÇ ³¡ÀÌ v2°¡ ³¡³ª±â Àü¿¡ ³ªÅ¸³µ´Ù¸é (Áï, v1ÀÇ ¿ø¼ÒÀÇ °³¼ö°¡ ´õ ÀÛ°í,
v1ÀÌ v2ÀÇ ¾ÕºÎºÐ°ú ³»¿ëÀÌ °°À» ¶§) true¸¦ ¸®ÅÏÇϰí, ±×·¸Áö ¾ÊÀ¸¸é false¸¦ ¸®ÅÏÇÑ´Ù.
´ÙÀ½ÀÇ ¿¹¸¦ º¸ÀÚ.
(1,2,3,4) < (5,6,7,8,9,10) ´Â false.
(1,2,3) < (1,2,3,4) ´Â true
(1,2,3,4) < (1,2,3) ´Â false
(0,1,2,3) < (1,2,3) ´Â true
¾Æ·¡ÀÇ ÄÚµå´Â À§¿¡¼ ¼¼¹øÂ° ¿¹¸¦ º¸¿©ÁØ´Ù.
<vector-comp.cpp>=
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> v1;
vector<int> v2;
for (int i=0; i<4; i++) v1.push_back(i+1);
for (int i=0; i<3; i++) v2.push_back(i+1);
cout << "v1: ";
for (int i=0; i<v1.size(); i++) cout << v1[i] << ' ';
cout << endl;
cout << "v2: ";
for (int i=0; i<v2.size(); i++) cout << v2[i] << ' ';
cout << endl;
cout << "v1 < v2 is: " << (v1<v2 ? "true" : "false") << endl;
}
<= ¿Í >= ¿ª½Ã ¿¹»óÇÏ´Â ´ë·Î µ¿ÀÛÇÒ °ÍÀÌ´Ù.
Iterator ¿Í STL
ÀåÀ» ºÁ¶ó.
¸®½ºÆ®
ÀåÀ» ºÁ¶ó.
ÁýÇÕ(Set)
set ÄÁÅ×ÀÌ³Ê Å¸ÀÔÀº º¤ÅͰ°ÀÌ À妽º¸¦ ÅëÇØ ¿ø¼Ò¿¡ Á¢±ÙÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, ¿ø¼Ò¸¦ Á÷Á¢ ÀúÀåÇϰí
»¬ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù. set ÄÁÅ×À̳ʴ ¼·Î ´Ù¸¥ ¿ø¼Òµé¸¸À» °®´Â ¼öÇÐÀûÀÎ ÁýÇÕ°ú °°ÀÌ µ¿ÀÛÇÑ´Ù.
±×·¯³ª, ¼öÇÐÀûÀÎ ÁýÇÕ°ú´Â ´Ù¸£°Ô, ÁýÇÕ ¾ÈÀÇ ¿ø¼ÒµéÀº (»ç¿ëÀÚ°¡ ÁöÁ¤ÇÏ´Â) ¾î¶² ¼ø¼ ´ë·Î
ÀúÀåµÇ°Ô µÈ´Ù. ½ÇÁ¦·Î À̰ÍÀº set ÄÁÅ×À̳ʷΠ¼öÇÐÀûÀÎ ÁýÇÕÀ» ±¸ÇöÇÏ´Â µ¥ ÀÖ¾î ÀÛÀº Á¦ÇÑÀÏ
»ÓÀ̰í, ÀÌ·¸°Ô ÇÔÀ¸·Î½á ¼ø¼°¡ ¾ø´Â °Íº¸´Ù ¸¹Àº ¿¬»ê¿¡¼ ´õ È¿À²ÀûÀÌ µÉ ¼ö ÀÖ´Ù.
SetÀ» ¸¸µé±â
set ÄÁÅ×À̳ʸ¦ ¸¸µé±â À§Çؼ´Â µÎ °¡Áö template ÀÎÀÚ°¡ ÇÊ¿äÇÏ´Ù - ÀÌ´Â setÀÌ °®°Ô µÉ
¿ø¼ÒµéÀÇ Å¸ÀÔ°ú µÎ ¿ø¼Ò¸¦ ºñ±³ÇÒ ¼ö ÀÖ´Â ºñ±³ÇÔ¼ö function objectÀÇ Å¸ÀÔÀÌ´Ù.
set<T, Compare> s;
(set < T > s¿Í °°Àº ¼±¾ðµµ °¡´ÉÇØ¾ßÇÑ´Ù.
ÀÌ´Â µÎ¹øÂ° ÀÎÀڷμ µðÆúÆ® template ÀÎÀÚÀÎ less < T >¸¦ »ç¿ëÇÑ´Ù.
ÇÏÁö¸¸ ¸¹Àº C++ ÄÄÆÄÀÏ·¯ (g++Æ÷ÇÔ)°¡ ±âº» template ÀÎÀÚ¸¦ Áö¿øÇÏÁö ¸øÇϰí ÀÖ´Ù.)
°£´ÜÇÑ Å¸ÀÔ T ¿¡ ´ëÇØ¼´Â less < T > function object¸¦ ¾µ ¼öµµ ÀÖ´Ù.
( "function object"°¡ ¹«¾ùÀΰ¡ ÇÏ´Â °í¹ÎÀº ÇÒÇÊ¿ä ¾ø´Ù.)
¿¹¸¦µé¾î ¾Æ·¡¿Í °°ÀÌ ¼±¾ðÇÏ¸é µÈ´Ù.
set<int, less<int> > s1;
set<double, less<double> > s2;
set<char, less<char> > s3;
set<string, less<string> > s4;
( ¼±¾ðÇÒ ¶§ µÚÂÊÀÇ > µÎ °³°¡ space·Î ¶ç¾îÁ® ÀÖÀ½¿¡ ÁÖÀÇÇ϶ó. ÀÌ´Â compiler°¡ >¸¦
½¬ÇÁÆ® ¿¬»êÀÚ(>>) ¿Í ±¸º°Çϱâ À§ÇØ ²À ÇÊ¿äÇÑ °ÍÀÌ´Ù.)
°¢°¢ÀÇ °æ¿ì function objectµéÀº °¢°¢ÀÇ Å¸ÀÔ¿¡ ¸Â°Ô <¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù.
(ÀÌ´Â °¢°¢
int, double, char, string ŸÀÔÀÌ´Ù. )
¾Æ·¡ÀÇ ÄÚµå´Â Á¤¼ö(int)ÀÇ setÀ» ¼±¾ðÇϰí, insert
¸Þ½îµå¸¦ »ç¿ëÇÏ¿© Á¤¼ö¸¦ ¸î°³ Ãß°¡ÇÑ´Ù.
±×¸®°í setÀ» Â÷·Ê´ë·Î º¸¸é¼ ¿ø¼ÒµéÀ» Ãâ·ÂÇÑ´Ù.
Àç¹ÌÀÖ´Â °ÍÀº Ãß°¡ÇÏ´Â ¼ø¼°¡ ¾î¶² ¼ø¼À̵çÁö setÀÇ ³»¿ëÀº Á¤·ÄµÈ »óÅ·ΠÃâ·ÂµÈ´Ù´Â
°ÍÀÌ´Ù.
<set-construct1.cpp>=
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int, less<int> > s;
set<int, less<int> >::iterator i;
s.insert(4);
s.insert(0);
s.insert(-9);
s.insert(7);
s.insert(-2);
s.insert(4);
s.insert(2);
cout << "The set contains the elements: ";
for (i=s.begin(); i!=s.end(); i++) cout << *i << ' ';
cout << endl;
}
4°¡ µÎ¹ø Ãß°¡µÇ¾úÀ½¿¡µµ ºÒ±¸Çϰí, Çѹø¹Û¿¡ ³ª¿ÀÁö ¾Ê´Â °Í¿¡ ÁÖÀÇÇØ¶ó.
ÀÌ´Â ÁýÇÕÀ̱⠶§¹®¿¡ ´ç¿¬ÇÑ °ÍÀÌ´Ù.
Function Objects¶õ ¹«¾ùÀΰ¡?
C++ÀÇ ¸ÚÁø Ư¡ Áß Çϳª´Â ¿¬»êÀÚÀÇ ¿À¹ö·ÎµùÀÌ´Ù. µû¶ó¼ »õ·Î ¸¸µé¾îÁø class¿¡ ´ëÇØ
+ °¡ ¾î¶² Àǹ̵çÁö °®µµ·Ï ÇÒ ¼ö ÀÖ´Ù. ±×·±µ¥, C++¿¡¼ ¿À¹ö·Îµå ÇÒ ¼ö ÀÖ´Â ¿¬»êÀÚ Áß
ÇÔ¼ö È£Ãâ ¿¬»êÀÚÀÎ ()°¡ ÀÖ°í, ÀÌ´Â classÀÇ ÀνºÅϽº°¡ ÇÔ¼ö¿Í °°ÀÌ µ¿ÀÛÇÒ ¼ö ÀÖµµ·Ï
ÇØÁÙ ¼ö ÀÖ´Ù. À̰ÍÀÌ function objectÀÌ´Ù.
°£´ÜÇÑ ¿¹Á¦¸¦ º¸ÀÚ.
<function-object.cpp>=
#include <iostream>
using namespace std;
template<class T>
class square {
public:
T operator()(T x) { return x*x; }
};
// ÀÌ´Â *°¡ Á¤ÀǵǴ ¾î¶² T¿¡ ´ëÇØ¼µçÁö ¾²ÀÏ ¼ö ÀÖ´Ù.
int main()
{
// function object¸¦ ¸¸µç´Ù.
square<double> f1;
square<int> f2;
// À̸¦ »ç¿ëÇÑ´Ù.
cout << "5.1^2 = " << f1(5.1) << endl;
cout << "100^2 = " << f2(100) << endl;
// ¾Æ·¡ÀÇ ³»¿ëÀº ÄÄÆÄÀÏ ¿¡·¯¸¦ Ãâ·ÂÇÒ °ÍÀÌ´Ù.
// cout << "100.1^2 = " << f2(100.1) << endl;
}
function object´Â STLÀÇ ¸î¸î ºÎºÐ, ƯÈ÷ set°ú map¿¡¼ ¸¹ÀÌ ¾²ÀδÙ.
function object°¡ ÇÊ¿äÇÑ °æ¿ì¸¦ »ý°¢Çغ¸ÀÚ.
¾Æ·¡ÀÇ ³»¿ëÀ» ¸¸Á·ÇÏ´Â comp¶ó´Â °ÍÀ» »ý°¢Çغ¸ÀÚ.
¸¸¾à comp(x,y), comp(y,z)°¡ trueÀ̸é, comp(x,z)µµ ¿ª½Ã trueÀÌ´Ù.
comp(x,x)´Â ¾ðÁ¦³ª falseÀÌ´Ù.
¾î¶² x,y¿¡ ´ëÇØ comp(x,y)¿Í comp(y,x)°¡ falseÀ̸é x¿Í y´Â °°Àº °´Ã¼ÀÌ´Ù.
ÀÌ´Â ¼ýÀÚ¿¡¼ ¹Ì¸¸°ü°è ( < )¸¦ ³ªÅ¸³½´Ù.
À§¿¡¼ ¾²ÀÎ less < T > function object ´Â type T¿¡ ´ëÇØ < ¿¬»êÀÚ·Î Á¤ÀǵǾî
ÀÖ´Ù. Áï, ´ÙÀ½°ú °°´Ù.
template<class T>
struct less {
bool operator()(T x, T y) { return x<y; }
}
(ÁøÂ¥ Á¤ÀÇ´Â ·¹ÆÛ·±½º¸¦ »ç¿ëÇϰí, ÀûÀýÇÑ const ¼±¾ðÀ» »ç¿ëÇϸç binary_function template class¸¦ »ó¼Ó¹Þ´Â´Ù.)
ÀÌ´Â ¸¸¾à T°¡ < ¿¬»êÀÚ¸¦ ±× ŸÀÔ¿¡ ´ëÇØ Á¤ÀÇÇØ³õ¾Ò´Ù¸é,
T ŸÀÔÀÇ ÁýÇÕÀ» ¼±¾ðÇÒ ¶§, ºñ±³¸¦ À§ÇÑ °ÍÀ¸·Î less < T > ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â
°ÍÀÌ´Ù.
¸¸¾à < ¿¬»êÀÚ°¡ ÇϰíÀÚ ÇÏ´Â °Í°ú ¸ÂÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. ÀÌ·² ¶§´Â ´Ù¸¥ ¿¹°¡ ÀÖ´Ù.
ÀÌ´Â < ¿¬»êÀÚ¸¦ ÀÌ¿ëÇÏ¿© °£´ÜÇÑ class¸¦ ¸¸µé°í, ´Ù¸¥ ¹æ½ÄÀÇ ºñ±³¸¦ ÇÏ´Â
function object¸¦ ¸¸µç´Ù. ¿À¹ö·Îµù µÈ <¿Í () ¿¬»êÀÚ°¡ STL°ú Àß µ¹¾Æ°¡±â À§Çؼ´Â
const ¸¦ Àû´çÈ÷ ½áÁà¾ß ÇÑ´Ù´Â °Í¿¡ ÁÖÀÇÇ϶ó.
<set-construct2.cpp>=
#include <iostream>
#include <set>
using namespace std;
// ÀÌ class´Â µÎ °³ÀÇ ¸â¹ö º¯¼ö¸¦ °®´Â´Ù.
// ¿À¹ö·ÎµùµÈ <Àº ¸â¹ö f1°ªÀ» °®°í µÎ class¸¦ ºñ±³ÇÑ´Ù.
class myClass {
private:
int f1;
char f2;
public:
myClass(int a, char b) : f1(a), f2(b) {}
int field1() const { return f1; }
char field2() const { return f2; }
bool operator<(myClass y) const
{ return (f1<y.field1()); }
};
// ÀÌ function object´Â ¸â¹ö f2ÀÇ °ªÀ» ±âÃÊ·Î
// myClass ŸÀÔÀÇ °´Ã¼µéÀ» ºñ±³ÇÑ´Ù.
class comp_myClass {
public:
bool operator()(myClass c1, myClass c2) const
{ return (c1.field2() < c2.field2()); }
};
int main()
{
set<myClass, less<myClass> > s1;
set<myClass, less<myClass> >::iterator i;
set<myClass, comp_myClass> s2;
set<myClass, comp_myClass>::iterator j;
s1.insert(myClass(1,'a'));
s2.insert(myClass(1,'a'));
s1.insert(myClass(1,'b'));
s2.insert(myClass(1,'b'));
s1.insert(myClass(2,'a'));
s2.insert(myClass(2,'a'));
cout << "Set s1 contains: ";
for (i=s1.begin(); i!=s1.end(); i++)
{
cout << "(" << (*i).field1() << ","
<< (*i).field2() << ")" << ' ';
}
cout << endl;
cout << "Set s2 contains: ";
for (j=s2.begin(); j!=s2.end(); j++)
{
cout << "(" << (*j).field1() << ","
<< (*j).field2() << ")" << ' ';
}
cout << endl;
}
(1,a)¿Í (2,a)¸¦ °¡Áø ÁýÇÕ s1Àº f1À» ±âÁØÀ¸·Î ºñ±³¸¦ ÇÑ´Ù. µû¶ó¼ (1,a)¿Í (1,b)´Â
°°Àº ¿ø¼Ò·Î Ãë±ÞµÈ´Ù. (1,a)¿Í (1,b)¸¦ °¡Áø ÁýÇÕ s2´Â f2¸¦ ±âÁØÀ¸·Î ºñ±³¸¦ Çϱ⠶§¹®¿¡
(1,a)¿Í (2,a)°¡ °°Àº ¿ø¼Ò·Î Ãë±ÞµÈ´Ù.
Ãâ·ÂÇϱâ
À§ÀÇ ¿¹¿¡¼ ÁýÇÕÀÇ ³»¿ëÀ» Ãâ·ÂÇÏ´Â °ÍÀº º°·Î ÁÁÁö ¾Ê´Ù.
¾Æ·¡ÀÇ Çì´õÆÄÀÏÀº operator<< À» ¿À¹ö·ÎµùÇÏ´Â
°£´ÜÇÑ Ç¥ÇöÀ» °®°í ÀÖ´Ù.
ÀÌ´Â °£´ÜÇÑ ¿ø¼Ò ŸÀÔÀ» °®´Â ÀÛÀº ÁýÇÕ¿¡¼´Â Àß µ¿ÀÛÇÑ´Ù.
<printset.h>=
#ifndef _PRINTSET_H
#define _PRINTSET_H
#include <iostream>
#include <set>
template<class T, class Comp>
std::ostream& operator<<(std::ostream& os, const std::set<T,Comp>& s)
{
std::set<T,Comp>::iterator iter = s.begin();
int sz = s.size();
int cnt = 0;
os << "{";
while (cnt < sz-1)
{
os << *iter << ",";
iter++;
cnt++;
}
if (sz != 0) os << *iter;
os << "}";
return os;
}
#endif
¿©±â¼ Ãâ·ÂÀ» À§ÇØ »ç¿ëÇÑ << ¿ë¹ýÀº ÁýÇÕÀÇ ¿ø¼ÒµéÀÌ << ¿¬»êÀÚ¸¦ »ç¿ëÇÒ ¼ö
ÀÖµµ·Ï Á¤ÀǵǾîÀÖ´Ù°í °¡Á¤ÇÑ °ÍÀÌ´Ù.
±×·¡¼ À̸¦ ÄÞ¸¶(,)·Î ±¸ºÐÇÏ°í ´ë°ýÈ£·Î µÑ·¯½Î¼ Ãâ·ÂµÇµµ·Ï ÇÑ °ÍÀÌ´Ù.
ÀÌ´Â ´ÙÀ½ ¿¹¿¡¼µµ »ç¿ëµÉ °ÍÀÌ´Ù.
¿ø¼ÒÀÇ ¼ö ±¸Çϱâ
ÁýÇÕÀÌ °øÁýÇÕÀÎÁö´Â empty() ¸Þ½îµå¸¦ »ç¿ëÇÏ¿© ¾Ë ¼ö ÀÖ´Ù. ÁýÇÕ¿¡ ¸î°³ÀÇ ¿ø¼Ò°¡
µé¾îÀÖ´ÂÁö´Â size() ¸Þ½îµå¸¦ »ç¿ëÇÏ¿© ¾Ë ¼ö ÀÖ´Ù.
À̵éÀº ÀÎÀÚ¾øÀÌ ºÒ·Á¼ °¢°¢ true ³ª false ȤÀº Á¤¼ö(int)¸¦ ¸®ÅÏÇÑ´Ù.
<set-size.cpp>=
#include <iostream>
#include <set>
#include "printset.h"
using namespace std;
int main()
{
set<int, less<int> > s;
cout << "The set s is "
<< (s.empty() ? "empty." : "non-empty.") << endl;
cout << "It has " << s.size() << "elements." << endl;
cout << "Now adding some elements... " << endl;
s.insert(1);
s.insert(6);
s.insert(7);
s.insert(-7);
s.insert(5);
s.insert(2);
s.insert(1);
s.insert(6);
cout << "The set s is now
<< (s.empty() ? "empty." : "non-empty.") << endl;
cout << "It has " << s.size() << "elements." << endl;
cout << "s = " << s << endl;
}
ÁýÇÕÀÌ ¼·Î °°ÀºÁö °Ë»çÇϱâ
µÎ ÁýÇÕÀÌ ¼·Î °°ÀºÁö´Â == ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© °Ë»çÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â
T::operator== ¸¦ »ç¿ëÇÏ¿© °¢ ¿ø¼Ò¸¦ Â÷·Ê´ë·Î °Ë»çÇÔÀ¸·Î½á ÀÌ·ç¾îÁø´Ù.
<set-equality.cpp>=
#include <iostream>
#include <set>
#include "printset.h"
using namespace std;
int main()
{
set<int, less<int> > s1, s2 ,s3;
for (int i=0; i<10; i++)
{
s1.insert(i);
s2.insert(2*i);
s3.insert(i);
}
cout << "s1 = " << s1 << endl;
cout << "s2 = " << s2 << endl;
cout << "s3 = " << s3 << endl;
cout << "s1==s2 is: " << (s1==s2 ? true. : false.) << endl;
cout << "s1==s3 is: " << (s1==s3 ? true. : false.) << endl;
}
¶ÇÇÑ, µÎ ÁýÇÕÀ» <À¸·Î ºñ±³ÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù. s1 < s2 ´Â s1ÀÌ »çÀü¼ø¼·Î(lexicographically) s2º¸´Ù ÀÛÀ¸¸é true, ±×·¸Áö ¾ÊÀ¸¸é falseÀÌ´Ù.
¿ø¼Ò¸¦ Ãß°¡Çϰųª »èÁ¦Çϱâ
ÁýÇÕ¿¡ ¿ø¼Ò¸¦ Ãß°¡ÇÏ´Â °ÍÀº insert ¸Þ½îµå (À§¿¡ »ç¿ëÇÑ °Í°ú °°ÀÌ)¸¦, »èÁ¦ÇÏ´Â °ÍÀº erase ¸Þ½îµå¸¦ ÅëÇØ ÀÌ·ç¾îÁø´Ù.
ŸÀÔ TÀÇ ¿ø¼ÒµéÀ» °®°í ÀÖ´Â ÁýÇÕÀÇ °æ¿ì, ´ÙÀ½°ú °°ÀÌ ÀÌ·ç¾îÁø´Ù :
pair < iterator, bool> insert(T& x).
À̴ ǥÁØ insert ÇÔ¼öÀÌ´Ù. ¸®ÅϰªÀº ¹«½ÃÇÒ¼öµµ ÀÖ°í, ¼º°øÀûÀ¸·Î Ãß°¡Çß´ÂÁö¸¦ ¾Ë±â À§ÇØ
»ç¿ëÇÒ ¼öµµ ÀÖ´Ù (°°Àº ¿ø¼Ò°¡ ÀÌ¹Ì ÁýÇÕ¿¡ ÀÖÀ» °æ¿ì ½ÇÆÐÇÑ´Ù).
¸¸¾à Ãß°¡°¡ ¼º°øÇß´Ù¸é, bool °ªÀº trueÀ̰í,
iterator´Â ±Ý¹æ Ãß°¡µÈ ¿ø¼Ò¸¦ °¡¸®Å°°Ô µÉ °ÍÀÌ´Ù.
¸¸¾à ¿ø¼Ò°¡ ÀÌ¹Ì Á¸ÀçÇÏ´Â °ÍÀ̶ó¸é, bool °ªÀº falseÀ̰í, iterator´Â ÀÌ¹Ì ÀÖ´Â °ªÀÌ
µ¿ÀÏÇÑ ¿ø¼Ò¸¦ °¡¸®Å°°Ô µÉ °ÍÀÌ´Ù.
iterator insert(iterator position, T& x).
ÀÌ insert ÇÔ¼ö´Â ÀÎÀڷμ Ãß°¡ÇϰíÀÚ ÇÏ´Â ¿ø¼Ò ¿Ü¿¡ iterator¸¦ ¹Þ´Âµ¥, ÀÌ´Â
Ãß°¡ÇÒ À§Ä¡¸¦ ã±â ½ÃÀÛÇÒ iteratorÀÌ´Ù. ¸®ÅϵǴ iterator´Â À§¿Í ¸¶Âù°¡Áö·Î
»õ·Î Ãß°¡µÈ ¿ø¼Ò³ª ÀÌ¹Ì Á¸ÀçÇÏ´Â °°Àº °ªÀÇ ¿ø¼ÒÀÌ´Ù.
int erase(T& x).
ÀÌ eraseÇÔ¼ö´Â Áö¿ì°íÀÚ ÇÏ´Â ¿ø¼Ò¸¦ ÀÎÀÚ·Î ¹Þ¾Æ ¸¸¾à ±× ¿ø¼Ò°¡ Á¸ÀçÇϸé Áö¿ì°í¼ 1À»
¸®ÅÏÇϰí, ¾øÀ¸¸é 0À» ¸®ÅÏÇÑ´Ù.
void erase(iterator position).
ÀÌ eraseÇÔ¼ö´Â ƯÁ¤ ¿ø¼Ò¸¦ °¡¸®Å°´Â iterator¸¦ ÀÎÀÚ·Î ¹Þ¾Æ ±× ¿ø¼Ò¸¦ Áö¿î´Ù.
void erase(iterator first, iterator last).
ÀÌ eraseÇÔ¼ö´Â µÎ iterator¸¦ ÀÎÀÚ·Î ¹Þ¾Æ [first,last] ¹üÀ§ÀÇ ¸ðµç ¿ø¼Ò¸¦ Áö¿î´Ù.
¾Æ·¡ÀÇ ¿¹´Â À§ ÇÔ¼öµéÀÇ »ç¿ë¹ýÀ» º¸¿©ÁØ´Ù.
<set-add-delete.cpp>=
#include <iostream>
#include <set>
#include "printset.h"
using namespace std;
int main()
{
set<int, less<int> > s1;
// Ç¥ÁØÀûÀÎ ¹æ½ÄÀ¸·Î ¿ø¼Ò¸¦ Ãß°¡ÇÑ´Ù.
s1.insert(1);
s1.insert(2);
s1.insert(-2);
// ƯÁ¤À§Ä¡¿¡ ¿ø¼Ò »ðÀÔ
s1.insert(s1.end(), 3);
s1.insert(s1.begin(), -3);
s1.insert((s1.begin()++)++, 0);
cout << "s1 = " << s1 << endl;
// ¼º°øÀûÀ¸·Î Ãß°¡µÇ¾ú´ÂÁö üũ
pair<set<int, less<int> >::iterator,bool> x = s1.insert(4);
cout << "Insertion of 4 " << (x.second ? worked. : failed.)
<< endl;
x = s1.insert(0);
cout << "Insertion of 0 " << (x.second ? worked. : failed.)
<< endl;
// insert¿¡¼ ¸®ÅÏµÈ iterator¸¦ µÎ¹øÂ° ÇüÅÂÀÇ insertÀÇ ÀÎÀÚ·Î
// »ç¿ëÇÒ ¼ö ÀÖ´Ù.
cout << "Inserting 10, 8 and 7." << endl;
s1.insert(10);
x=s1.insert(7);
s1.insert(x.first, 8);
cout << "s1 = " << s1 << endl;
// ¸î ¿ø¼ÒµéÀ» Áö¿î´Ù.
cout << "Removal of 0 " << (s1.erase(0) ? worked. : failed.)
<< endl;
cout << "Removal of 5 " << (s1.erase(5) ? worked. : failed.)
<< endl;
// ¿ø¼Ò¸¦ ã¾Æ¼, Áö¿î´Ù. (find ÇÔ¼ö´Â ´ÙÀ½ ÀåÀ» ÂüÁ¶)
cout << "Searching for 7." << endl;
set<int,less<int> >::iterator e = s1.find(7);
cout << "Removing 7." << endl;
s1.erase(e);
cout << "s1 = " << s1 << endl;
// ¸¶Áö¸·À¸·Î ¸ðµç ¿ø¼Ò¸¦ Áö¿î´Ù.
cout << "Removing all elements from s1." << endl;
s1.erase(s1.begin(), s1.end());
cout << "s1 = " << s1 << endl;
cout << "s1 is now " << (s1.empty() ? empty. : non-empty.)
<< endl;
}
¿ø¼Ò¸¦ ã±â
¾î¶² ¿ø¼Ò°¡ ÁýÇÕ¿¡ ÀÖ´ÂÁö Ã¼Å©ÇØÁÖ´Â µÎ°¡Áö ÇÔ¼ö°¡ ÀÖ´Ù.
iterator find(T& x).
ÀÌ ÇÔ¼ö´Â ÁýÇÕ¿¡ ¿ø¼Ò x°¡ Á¸ÀçÇÏ´ÂÁö ã´Â´Ù. ¸¸¾à ãÀ¸¸é
À̸¦ °¡¸®Å°´Â iterator¸¦ ¸®ÅÏÇϰí, ¾øÀ¸¸é end()¸¦ ¸®ÅÏÇÑ´Ù.
int count(T& x).
ÀÌÇÔ¼ö´Â Á¸ÀçÇϸé 1À», ¾øÀ¸¸é 0À» ¸®ÅÏÇÑ´Ù.
(multiset¿¡¼ÀÇ countÇÔ¼ö´Â °°Àº ¿ø¼Ò°¡ ¿©·¯°³ ÀÖÀ» ¼ö ÀÖÀ¸¹Ç·Î
¸®ÅϰªÀÌ 1º¸´Ù ´õ Ŭ ¼öµµ ÀÖ´Ù.
count¶ó´Â ¸»ÀÇ ¶æÀ» »ý°¢Çغ¸¶ó! )
findÀÇ »ç¿ë¹ýÀº ÀÌ¹Ì À§¿¡ º¸ÀÎ ÀûÀÌ ÀÖ´Ù. ¿ì¸®´Â count¸¦ ÀÌ¿ëÇÏ¿© °£´ÜÇÑ template±â¹ÝÀÇ
ÁýÇÕ¿¡ ¼ÓÇÏ´ÂÁö testÇÏ´Â ÇÔ¼ö¸¦ ¸¸µé ¼ö ÀÖ´Ù.
(ÀÌ´Â ÀÎÀÚ x¿¡ ´ëÇÑ ·¹ÆÛ·±½º¸¦ Á¦°øÇÑ´Ù.)
<setmember.h>=
#ifndef _SETMEMBER_H
#define _SETMEMBER_H
#include <set>
template<class T, class Comp>
bool member(T x, std::set<T,Comp>& s)
{
return (s.count(x)==1 ? true : false);
}
#endif
// ÀÌ´Â ´ÙÀ½°ú °°ÀÌ ¾²ÀÏ ¼ö ÀÖ´Ù.
<set-membership.cpp>=
#include <iostream>
#include <set>
#include "printset.h"
#include "setmember.h"
using namespace std;
int main()
{
set<int, less<int> > s;
for (int i= 0; i<10; i++) s.insert(i);
cout << "s = " << s << endl;
cout << "1 is " << (member(1,s) ? : not) << " a member of s "
<< endl;
cout << "10 is " << (member(10,s) ? : not) << " a member of s "
<< endl;
}
ÁýÇÕ ¿¬»ê
STLÀº ºÎºÐÁýÇÕ, ÇÕÁýÇÕ, ±³ÁýÇÕ, Â÷ÁýÇÕ, ´ëĪÂ÷ÁýÇÕ(XOR) µîÀÇ
ÁýÇÕ¿¬»êÀ» generic ¾Ë°í¸®ÁòÀ¸·Î Á¦°øÇÑ´Ù.
ÀÌ ÇÔ¼öµéÀ» ÀÌ¿ëÇϱâ À§Çؼ´Â algo.h¸¦ include ÇØ¾ßÇÑ´Ù.
(¾Æ·¡ÀÇ ³»¿ëÁß iter´Â ÀûÀýÇÑ iterator¸¦ ÀǹÌÇÑ´Ù).
bool includes(iter f1,iter l1,iter f2,iter l2).
À§ ÇÔ¼ö´Â [f2,l2] ¹üÀ§¿¡ ÀÖ´Â °ÍµéÀÌ [f1,l1] ¾ÈÀÇ °ÍµéÀ» Æ÷ÇÔÇÏ´Â Áö¸¦ üũÇÑ´Ù.
¸¸¾à Æ÷ÇÔÇϸé true¸¦, ±×·¸Áö ¾ÊÀ¸¸é false¸¦ ¸®ÅÏÇÑ´Ù.
µû¶ó¼ ÇÑ ÁýÇÕÀÌ ´Ù¸¥ ÁýÇÕÀ» Æ÷ÇÔÇÏ´Â Áö¸¦ º¸·Á¸é, ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù.
includes(s1.begin(), s1.end(), s2.begin(), s2.end())
The includes function checks the truth of 3#3 ( that is of 4#4).
ÀÌ ÇÔ¼ö´Â ÁýÇÕÀÌ < ¿¬»êÀÚ¸¦ ÀÌ¿ëÇØ Á¤·ÄµÇ¾ú´Ù°í º»´Ù. ¸¸¾à, <ÀÌ ¾Æ´Ñ ´Ù¸¥ ¿¬»êÀÚ
°¡ »ç¿ëµÇ¾ú´Ù¸é, ÀÌ(function object)¸¦ ¸¶Áö¸· ÀÎÀڷμ Ãß°¡·Î ³Ñ°ÜÁÖ¸é µÈ´Ù.
iter set_union(iter f1,iter l1,iter f2,iter l2,iter result).
ÀÌ´Â [f1,l1]°ú [f2,l2] ¹üÀ§¿¡ ÀÖ´Â ÁýÇÕµéÀÇ ÇÕÁýÇÕÀ» ¸¸µç´Ù.
ÀÎÀÚ·Î ÁÖ´Â result °ªÀº »õ·Î¸¸µé¾îÁø ÇÕÁýÇÕÀÇ Ã¹ ÀÎÀÚ¸¦ °¡¸®Å°´Â iteratorÀÌ´Ù.
¸®ÅϰªÀº »õ·Î¿î ÁýÇÕÀÇ ³¡(end)¸¦ °¡¸®Å°´Â iteratorÀÌ´Ù.
result ÀÎÀÚ°¡ iterator¶õ ¸»Àº, ´ÙÀ½°ú °°Àº ½ÄÀ¸·Î set_unionÀ» »ç¿ëÇÏ¸é ¾ÈµÈ´Ù´Â
°ÍÀÌ´Ù.
set<int, less<int> > s1, s2, s3;
// s1 °ú s2ÀÇ ¿ø¼Ò¸¦ °¡Áö°í ÇÕÁýÇÕÀ» ¸¸µç´Ù.
// (±×·¯³ª ÀÌ·± ½ÄÀ¸·Î´Â µ¿ÀÛÇÏÁö ¾ÊÀ½)
set_union(s1.begin(), s1.end(),
s2.begin(), s2.end(),
s3.begin());
±× ÀÌÀ¯´Â begin()°ú end()°¡ ÁýÇÕÀ̳ª ¸Ê¿¡ »ç¿ëµÉ ¶§´Â »ó¼ö input iterator°¡ µÇ±â ¶§¹®ÀÌ´Ù.
ÀÌ·¯ÇÑ iterator´Â ÁýÇÕÀÇ ¿ø¼Ò¸¦ Àбâ À§Çؼ´Â »ç¿ëµÉ ¼ö ÀÖÁö¸¸, °ªÀ» ¾µ ¼ö´Â ¾ø´Ù.
(¶ÇÇÑ ¸¸¾à °ªÀ» ¾µ ¼ö ÀÖ°Ô ÇÑ´Ù¸é ÁýÇÕÀÇ ¼ø¼¸¦ ¸Á°¡¶ß¸± ¼ö ÀÖ´Â À§ÇèÀÌ ÀÖ±â
¶§¹®À̱⵵ ÇÏ´Ù)
ÇØ°áÃ¥Àº set_typeÀÇ insert iterator¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ´Â
(*i)=value °°Àº ºÒ°¡´ÉÇÑ ±¸¹®À» s.insert(i,value)ÀÇ ÇüÅ·Π¾µ ¼ö ÀÖ°Ô ÇØÁØ´Ù.
(¿©±â¼ s´Â iterator i°¡ °¡¸®Å°´Â ÁýÇÕÀÌ´Ù. ÀÌ´Â ´ÙÀ½°ú °°ÀÌ ¾²ÀδÙ.
// ÆíÀǸ¦ À§ÇØ Typedef¸¦ »ç¿ë
typedef set<int, less<int> > intSet;
intSet s1, s2, s3;
// s1°ú s2¿¡ ¸î ¿ø¼Ò¸¦ Ãß°¡.
// ±×¸®°í ÇÕÁýÇÕÀ» ±¸ÇÑ´Ù.
set_union(s1.begin(), s1.end(),
s2.begin(), s2.end(),
insert_iterator<intSet>(s3,s3.begin()) );
ÀÌÁ¦ À§¿¡ ³ª¿À´Â °ÍµéÀ» Á¾ÇÕÀûÀ¸·Î »ç¿ëÇÏ´Â ¿¹Á¦¸¦ º¸ÀÚ.
<set-theory.cpp>=
#include <iostream>
#include <set>
#include <algorithm>
#include <iterator>
#include "printset.h"
using namespace std;
int main()
{
typedef set<int, less<int> > intSet;
intSet s1, s2, s3, s4;
for (int i=0; i<10; i++)
{ s1.insert(i);
s2.insert(i+4);
}
for (int i=0; i<5; i++) s3.insert(i);
cout << "s1 = " << s1 << endl;
cout << "s2 = " << s2 << endl;
cout << "s3 = " << s3 << endl;
// s1ÀÌ s2ÀÇ ºÎºÐÁýÇÕÀΰ¡?
bool test = includes(s2.begin(),s2.end(),s1.begin(),s1.end());
cout << "s1 subset of s2 is " << (test ? true. : false.) << endl;
// s3°¡ s1ÀÇ ºÎºÐÁýÇÕÀΰ¡?
test = includes(s1.begin(),s1.end(),s3.begin(),s3.end());
cout << "s3 subset of s1 is " << (test ? true. : false.) << endl;
// s1°ú s2ÀÇ ÇÕÁýÇÕ.
set_union(s1.begin(), s1.end(), s2.begin(), s2.end(),
insert_iterator<intSet>(s4,s4.begin()) );
cout << "s1 union s2 = " << s4 << endl;
// s4¸¦ Áö¿ì°í, s1°ú s2ÀÇ ±³ÁýÇÕÀ» ±¸ÇÑ´Ù.
// ( ¸¸¾à s4¸¦ Áö¿ìÁö ¾ÊÀ¸¸é ¿ø·¡ s4¿¡ µé¾îÀÖ´Â °Íµéµµ
// °°ÀÌ µé¾î°¡°Ô µÉ °ÍÀÌ´Ù. )
s4.erase(s4.begin(),s4.end());
set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(),
insert_iterator<intSet>(s4,s4.begin()) );
cout << "s1 intersection s2 = " << s4 << endl;
// Â÷ÁýÇÕ
s4.erase(s4.begin(),s4.end());
set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(),
insert_iterator<intSet>(s4,s4.begin()) );
cout << "s1 minus s2 = " << s4 << endl;
// Â÷ÁýÇÕÀº ´ëĪÀûÀÌÁö ¾Ê´Ù. (Áï, A-B != B-A)
s4.erase(s4.begin(),s4.end());
set_difference(s2.begin(), s2.end(), s1.begin(), s1.end(),
insert_iterator<intSet>(s4,s4.begin()) );
cout << "s2 minus s1 = " << s4 << endl;
// ´ëĪÂ÷ÁýÇÕ
s4.erase(s4.begin(),s4.end());
set_symmetric_difference(s1.begin(), s1.end(), s2.begin(), s2.end(),
insert_iterator<intSet>(s4,s4.begin()) );
cout << "s1 symmetric_difference s2 = " << s4 << endl;
// ´ëĪÂ÷ÁýÇÕÀº ´ëĪÀûÀÌ´Ù. (Áï, commutative)
s4.erase(s4.begin(),s4.end());
set_symmetric_difference(s2.begin(), s2.end(), s1.begin(), s1.end(),
insert_iterator<intSet>(s4,s4.begin()) );
cout << "s2 symmetric_difference s1 = " << s4 << endl;
}
¸Ê
ÀåÀ» º¸¾Æ¶ó.
STL ¾Ë°í¸®Áò
ÀåÀ» º¸¾Æ¶ó.
C++¿¡¼ÀÇ ¾²·¹µå
IBM pthread °¡À̵å, °³³ä, API ·¹ÆÛ·±½º
http://www.as400.ibm.com/developer/threads/uguide/document.htm
¹Ì·¯»çÀÌÆ® :
IBM main site
C++ÀÇ QpThread ¶óÀ̺귯¸®´Â system level ¾²·¹µå(POSIX thread) À§¿¡¼ ¾²·¹µå¿Í
Unix signalÀ» À§ÇÑ C++ °´Ã¼ÁöÇⱸÁ¶¸¦ Á¦°øÇÑ´Ù.
http://lin.fsid.cvut.cz/~kra/index.html
ThreadJack Àº Ç÷§Æû¿¡ »ó°ü¾ø´Â C++ class library·Î¼,
Java¿Í À¯»çÇÑ ¸ÖƼ¾²·¹µå ÇÁ·Î±×·¡¹Ö ¸ðµ¨À» Á¦°øÇÑ´Ù.
http://www.esm.co.jp/divisions/open-sys/ThreadJack/index-e.html
±×¸®°í ´ÙÀ½ÀÇ ÁÖ¼Ò¿¡¼ ¹ÞÀ» ¼ö ÀÖ´Ù.
http://www.esm.co.jp/divisions/open-sys/ThreadJack/source-dl-e.html
APE´Â "APE Portable Environment"ÀÇ ¾àÀÚ·Î, UNIX (pthread)¿Í Win32 API¸¦ ±â¹ÝÀ¸·Î
¾îµð¼³ª ¾µ ¼ö ÀÖ´Â ¾²·¹µå ±â¹Ý ¼¹ö¸¦ Á¦°øÇÏ´Â C++ class ¶óÀ̺귯¸®ÀÌ´Ù.
APE´Â ¾²·¹µå, ¼ÒÄÏ, ÆÄÀÏÁ¦¾î, µ¿±âÈ µµ±¸ µîÀÇ Ãß»ó class ¸¦ Á¦°øÇÑ´Ù.
APEÀÇ ¸ñÀûÀº C++À» ÀÌ¿ëÇÏ¿© ÀÛ°í °£´ÜÇÑ ÇÁ·ÎÁ§Æ®¿¡¼µµ ½ÇÁ¦ÀûÀ̸鼵µ
Æí¸®ÇÑ ¾²·¹µå±â¹Ý ¼¹ö¸¦ ¸¸µå´Â °ÍÀÌ´Ù.
µû¶ó¼ ´Ü¼øÇÔ°ú ³·Àº ¿À¹öÇìµå°¡ Áß¿äÇÏ´Ù.
http://www.voxilla.org/projects/projape.html
Portabale Thread Lib http://www.media.osaka-cu.ac.jp/~k-abe/PTL
Thread-Recyling in C++ http://www.sigs.de/html/kuhlmann.html
¾²·¹µå Æ©Å丮¾ó
Æ©Å丮¾ó Àüü¸¦ ÇϳªÀÇ ÆÄÀÏ·Î ¾Æ·¡¿¡¼ ¹ÞÀ» ¼ö ÀÖ´Ù.
http://www.milkywaygalaxy.freeservers.com
"Source code c++ Programming howto"¸¦ Ŭ¸¯Ç϶ó.
¾²·¹µå Æ©Å丮¾óÀº
http://www.math.arizona.edu/swig/pthreads/threads.html¿¡ ÀÖ´Ù.
HERT Æ©Å丮¾óÀº http://www.hert.org/docs/tutorials¿¡ ÀÖ°í,
¾²·¹µå¿¡ ´ëÇØ ã¾Æº¸·Á¸é ¿©±â·Î °¡¶ó.
linuxjournalÀÇ ¾²·¹µå ¼Ò°³±Û.
North Arizona Univ NAU
POSIX threads Acctcom multi-thread
C++¿¡¼ ¾²·¹µå class µðÀÚÀÎÇϱâ
ÀÌ ÀåÀº
Ryan Teixeira
¿¡ ÀÇÇØ ¾²¿©Á³°í, ±× ¹®¼´Â
¿©±â¿¡ ÀÖ´Ù.
.
¼Ò°³
¸ÖƼ ¾²·¹µå ÇÁ·Î±×·¡¹ÖÀº Á¡Á¡ Àα⸦ ¾ò°íÀÖ´Ù.
ÀÌ ÀåÀº ¾²·¹µå¸¦ Áö¿øÇÏ´Â C++ classÀÇ µðÀÚÀÎÀ» º¸¿©ÁÙ °ÍÀÌ´Ù.
mutex³ª ¼¼¸¶Æ÷¾î°°Àº ¾²·¹µå ÇÁ·Î±×·¡¹ÖÀÇ ¸î¸î Ãø¸éÀº ¿©±â¼ ³íÀǵÇÁö ¾Ê´Â´Ù.
¶ÇÇÑ ¾²·¹µåÀÇ °ü¸®¸¦ À§ÇÑ ½Ã½ºÅÛ ÄݵéÀº ÀϹÝÀûÀÎ ÇüÅ·Π³ªÅ¸³»¾ú´Ù.
¾²·¹µå¿¡ ´ëÇÑ °£´ÜÇÑ ¼Ò°³
¾²·¹µå¸¦ ÀÌÇØÇϱâ À§Çؼ´Â, ÇѲ¨¹ø¿¡ µ¹¾Æ°¡´Â ¿©·¯ ÇÁ·Î±×·¥À» »ý°¢ÇؾßÇÑ´Ù.
¶ÇÇÑ, ÀÌ ÇÁ·Î±×·¥µéÀÌ ¶È°°Àº Àü¿ªº¯¼ö¿Í ÇÔ¼öµé¿¡ Á¢±ÙÇÑ´Ù°í »ý°¢Çغ¸¾Æ¶ó.
ÀÌ ÇÁ·Î±×·¥µéÀº ½Ç¿¡ ºñÀ¯µÉ ¼ö ÀÖ°í, ±×·¡¼ ¾²·¹µå¶ó°í ºÒ¸°´Ù.
Áß¿äÇÑ Â÷ÀÌÁ¡ÀÌ ÀÖ´Ù¸é, °¢°¢ÀÇ ¾²·¹µå´Â ´Ù¸¥ ¾²·¹µå°¡ ÁøÇàÇÏ´Â °ÍÀ»
±â´Ù¸± Çʿ䰡 ¾ø´Ù´Â °ÍÀÌ´Ù. ¸ðµç ¾²·¹µå°¡ µ¿½Ã¿¡ ÁøÇàµÈ´Ù.
ºñÀ¯¸¦ ÇÏÀÚ¸é, À̵éÀº À°»ó¼±¼ö¿Í °°ÀÌ ¾Æ¹«µµ ´Ù¸¥ ¼±¼ö¸¦ ±â´Ù¸®Áö
¾Ê´Â´Ù. °¢ÀÚ ÀÚ½ÅÀÇ ¼Óµµ·Î ÁøÇàµÇ´Â °ÍÀÌ´Ù.
¿Ö ¾²·¹µå¸¦ »ç¿ëÇÏ³Ä°í ¹°¾îº»´Ù¸é, ¾²·¹µå´Â Á¾Á¾ ¾îÇø®ÄÉÀ̼ÇÀÇ ¼º´ÉÀ»
Çâ»ó½Ãų ¼ö ÀÖ°í, ±¸ÇöÇÏ´Â°Ô ±î´Ù·ÓÁö ¾Ê´Ù.
Áï, Á¶±×¸¸ ÅõÀÚ·Î Å« È¿°ú¸¦ º¼ ¼ö ÀÖ´Â °ÍÀÌ´Ù. À̹ÌÁö¸¦ ¼ºñ½ºÇÏ´Â
À̹ÌÁö ¼¹ö ÇÁ·Î±×·¥À» »ý°¢Çغ¸¾Æ¶ó.
ÀÌ ÇÁ·Î±×·¥Àº ´Ù¸¥ ÇÁ·Î±×·¥À¸·ÎºÎÅÍ À̹ÌÁö¿¡ ´ëÇÑ ¿äûÀ» ¹Þ´Â´Ù.
±×·¯¸é ÀÌ À̹ÌÁö¸¦ µ¥ÀÌÅͺ£À̽º¿¡¼ ã¾Æ ¿äûÀ» º¸³½ ÇÁ·Î±×·¥¿¡°Ô
´Ù½Ã º¸³»ÁØ´Ù. ¸¸¾à ¼¹ö°¡ ÇϳªÀÇ ¾²·¹µå·Î ¸¸µé¾îÁ³´Ù¸é, Çѹø¿¡
ÇϳªÀÇ ÇÁ·Î±×·¥¸¸ ¿äûÀ» º¸³¾ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¸¸¾à ÇÁ·Î±×·¥ÀÌ
À̹ÌÁö¸¦ ã°Å³ª º¸³»ÁÖ´Â ÁßÀ̶ó¸é ´Ù¸¥ ¿äûÀ» ó¸®ÇÒ ¼ö ¾øÀ» °ÍÀÌ´Ù.
¹°·Ð ÀÌ·¯ÇÑ ½Ã½ºÅÛÀ» ¾²·¹µå¸¦ ÀÌ¿ëÇÏÁö ¾Ê°íµµ ¸¸µé ¼ö ÀÖÁö¸¸,
¾²·¹µå¸¦ ¾²¸é, ¿©·¯°³ÀÇ ¿äûÀ» ¾ÆÁÖ ÀÚ¿¬½º·´°Ô ó¸®ÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
°£´ÜÇÑ Á¢±Ù ¹æ¹ýÀº ÇϳªÀÇ ¿äû´ç ÇϳªÀÇ ¾²·¹µå¸¦ ¸¸µå´Â °ÍÀÌ´Ù.
¸ÞÀÎ ¾²·¹µå´Â ¿äû¿¡ µû¶ó ¾²·¹µå¸¦ ¸¸µé¾îÁֱ⸸ ÇÏ¸é µÈ´Ù.
±×·¯¸é »õ·Î ¸¸µé¾îÁø ¾²·¹µå°¡ ¿äûÇÏ´Â ÇÁ·Î±×·¥°ú ´ëÈÇϸé¼
¼ºñ½º¸¦ ÇØÁÖ¸é µÈ´Ù. À̹ÌÁö¸¦ ã¾Æ¼ º¸³½ ÈÄ¿¡´Â ¾²·¹µå°¡
½º½º·Î Á¾·áÇÏ¸é µÈ´Ù. ÀÌ·¸°Ô Çϸé ÇϳªÀÇ ¿äûÀ» ¼ºñ½º ÇÏ´Â µµÁß¿¡µµ
´Ù¸¥ ¿äûÀ» ¹ÞÀ» ¼ö ÀÖ´Â À¯¿¬ÇÑ ½Ã½ºÅÛÀÌ µÉ °ÍÀÌ´Ù.
±âº»ÀûÀÎ Á¢±Ù¹æ¹ý
¾²·¹µå¸¦ ¸¸µé±â À§Çؼ´Â, ¾²·¹µåÀÇ ½ÃÀÛÁ¡ÀÌ µÉ ÇÔ¼ö¸¦ ¸í½ÃÇØ¾ß ÇÑ´Ù.
¿î¿µÃ¼Á¦ ·¹º§¿¡¼´Â, À̰ÍÀÌ ÀϹÝÀûÀÎ ÇÔ¼öÀÌ´Ù.
±×·±µ¥ C++ÀÇ class ¸â¹öÇÔ¼ö´Â ½ÃÀÛÇÔ¼ö°¡ µÉ ¼ö ¾ø±â ¶§¹®¿¡ ¾à°£ÀÇ Æ®¸¯À»
½á¾ßÇÑ´Ù.
ÇÏÁö¸¸, Ŭ·¡½ºÀÇ static ¸â¹öÇÔ¼ö´Â °¡´ÉÇÏ´Ù. À̰ÍÀÌ ¿ì¸®°¡ ½ÃÀÛÇÔ¼ö·Î
ÀÌ¿ëÇÒ °ÍÀÌ´Ù.
static ¸â¹öÇÔ¼ö´Â C++ °´Ã¼ÀÇ this Æ÷ÀÎÅ͸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù.
À̵éÀº ¿ÀÁ÷ static µ¥ÀÌÅ͸¸ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ´ÙÇàÈ÷µµ ¹æ¹ýÀÌ ÀÖ´Ù.
¾²·¹µåÀÇ ½ÃÀÛÁ¡ ÇÔ¼ö´Â ÀÎÀÚ·Î void *¸¦ °®°Ô µÇ´Âµ¥, À̸¦ ¾²·¹µå ¾È¿¡¼
¾î¶² ŸÀÔÀ¸·Î³ª casting ÇØ¼ ¾µ ¼ö ÀÖ´Ù.
¿ì¸®´Â À̸¦ static ÇÔ¼ö¿¡ this ¸¦ ³Ñ°ÜÁÖ±â À§ÇØ ¾µ °ÍÀÌ´Ù.
µû¶ó¼ static ÇÔ¼ö´Â À̸¦ casting ÇÏ¿© staticÀÌ ¾Æ´Ñ ÇÔ¼ö¸¦ ºÎ¸£±â À§ÇØ ¾µ ¼ö ÀÖ´Ù.
±¸Çö
¿ì¸®´Â ¾à°£ Á¦ÇÑµÈ ±â´ÉÀ» °®´Â ¾²·¹µå class¸¦ ¸¸µé °ÍÀÌ´Ù.
½ÇÁ¦ ¾²·¹µå´Â ÀÌ class°¡ ÇÏ´Â °Íº¸´Ù ÈξÀ ¸¹Àº ÀϵéÀ» ÇÒ ¼ö ÀÖ´Ù.
class Thread
{
public:
Thread();
int Start(void * arg);
protected:
int Run(void * arg);
static void * EntryPoint(void*);
virtual void Setup();
virtual void Execute(void*);
void * Arg() const {return Arg_;}
void Arg(void* a){Arg_ = a;}
private:
THREADID ThreadId_;
void * Arg_;
};
Thread::Thread() {}
int Thread::Start(void * arg)
{
Arg(arg); // user µ¥ÀÌÅ͸¦ ÀúÀåÇÔ.
int code = thread_create(Thread::EntryPoint, this, & ThreadId_);
return code;
}
int Thread::Run(void * arg)
{
Setup();
Execute( arg );
}
/*static */
void * Thread::EntryPoint(void * pthis)
{
Thread * pt = (Thread*)pthis;
pthis->Run( Arg() );
}
virtual void Thread::Setup()
{
// Setup¿¡ ÇØ´çÇÏ´Â Àϵé
}
virtual void Thread::Execute(void* arg)
{
// ½ÇÇàÇÒ ³»¿ë
}
¿ì¸®°¡ ¾²·¹µå¸¦ C++ °´Ã¼·Î »ç¿ëÇϰíÀÚ ÇÑ´Ù´Â °ÍÀ» ÀÌÇØÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù.
°¢°¢ÀÇ °´Ã¼´Â ÇϳªÀÇ ¾²·¹µå¿¡ ´ëÇÑ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÑ´Ù. ¾²·¹µå¿Í °´Ã¼´Â ´Ù¸£´Ù.
°´Ã¼´Â ¾²·¹µå ¾øÀÌ Á¸ÀçÇÒ ¼ö ÀÖ´Ù. ÀÌ ±¸Çö¿¡¼, ¾²·¹µå ÀÚü´Â Start ÇÔ¼ö°¡
ºÒ¸± ¶§±îÁö Á¸ÀçÇÏÁö ¾Ê´Â´Ù.
¿©±â¼ userÀÇ ÀÎÀÚ¸¦ class¿¡ ÀúÀåÇѴٴµ¥ ÁÖÀÇÇØ¶ó.
ÀÌ´Â ¾²·¹µå°¡ ½ÃÀÛµÉ ¶§±îÁö Àӽ÷ΠÀ̸¦ ÀúÀåÇÒ °ø°£ÀÌ ÇÊ¿äÇϱ⠶§¹®ÀÌ´Ù.
¿î¿µÃ¼Á¦ ¾²·¹µå´Â ÀÎÀÚ¸¦ Çϳª ³Ñ±æ ¼ö ÀÖ°Ô ÇØÁÖÁö¸¸, ¿ì¸®´Â this ¶§¹®¿¡ À̸¦ Á÷Á¢
³Ñ°ÜÁÙ ¼ö ¾ø´Ù. ±×·¡¼ ¿ì¸®´Â ÀÎÀÚ¸¦ Àá½Ã class¿¡ ÀúÀåÇß´Ù°¡ ÇÔ¼ö°¡ ½ÃÀÛµÉ ¶§
´Ù½Ã ²¨³»¼ ³Ñ°ÜÁÖ°Ô µÈ´Ù.
Thread();
»ý¼ºÀÚÀÌ´Ù.
int Start(void * arg);
ÀÌ ÇÔ¼ö´Â ¾²·¹µå¸¦ ¸¸µé°í, À̸¦ ½ÃÀÛÇÏ°Ô ÇØÁØ´Ù.
ÀÌ ÀÎÀÚ´Â ¾²·¹µå¿¡ µ¥ÀÌÅ͸¦ ³Ñ°ÜÁÖ±â À§ÇØ »ç¿ëµÇ°í,
Start()´Â ¿î¿µÃ¼Á¦ÀÇ ¾²·¹µå »ý¼º ÇÔ¼ö¸¦ ºÎ¸§À¸·Î½á ¾²·¹µå¸¦ ¸¸µç´Ù.
int Run(void * arg);
ÀÌ ÇÔ¼ö´Â °Çµå¸®¸é ¾ÈµÇ´Â ÇÔ¼öÀÌ´Ù.
static void * EntryPoint(void * pthis);
ÀÌ ÇÔ¼ö´Â ¾²·¹µåÀÇ ½ÃÀÛ Á¡ ¿ªÇÒÀ» ÇÑ´Ù.
ÀÌ ÇÔ¼ö´Â ´Ü¼øÈ÷ pthis¸¦ Thread *·Î castingÇØ¼ Run ÇÔ¼ö¸¦ ºÒ·¯ÁØ´Ù.
virtual void Setup();
ÀÌ ÇÔ¼ö´Â ¾²·¹µå°¡ ¸¸µé¾îÁø ÈÄ, ½ÇÇàÀÌ ½ÃÀ۵DZâ Àü¿¡ ºÒ·ÁÁø´Ù.
ÀÌ ÇÔ¼ö¸¦ override ÇÒ ¶§´Â, ºÎ¸ð classÀÇ Setup()¸¦ ºÎ¸£´Â °ÍÀ» ±â¾ïÇ϶ó.
virtual void Execute(void *);
ÇϰíÀÚ ÇÏ´Â ÀÏÀ» À§ÇØ ÀÌ ÇÔ¼ö¸¦ overrideÇØ¶ó.
Thread Class »ç¿ëÇϱâ
thread class¸¦ »ç¿ëÇϱâ À§Çؼ´Â, »õ·Î¿î class¸¦ ¸¸µé¾î¾ß ÇÑ´Ù.
±×¸®°í ¸¸µé°íÀÚ ÇÏ´Â ±â´ÉÀ» À§ÇØ Execute()¸¦ overrideÇÏ¸é µÈ´Ù.
¶ÇÇÑ, Execute°¡ ºÒ¸®±â ÀüÀÇ Ãʱâȸ¦ À§ÇØ Setup()À» overrideÇÒ ¼öµµ ÀÖ´Ù.
¸¸¾à, Setup()À» overrideÇÑ´Ù¸é, ºÎ¸ð classÀÇ Setup()À» ºÎ¸£´Â °ÍÀ» ±â¾ïÇ϶ó.
°á·Ð
ÀÌ ÀåÀº C++·Î ¾²·¹µå classÀÇ ±¸ÇöÀ» »ìÆìº¸¾Ò´Ù.
¹°·Ð À̰ÍÀº ´Ü¼øÇÑ Á¢±Ù¹æ¹ýÀ̰í, ´õ ÁÁÀº µðÀÚÀÎÀ» À§ÇÑ ±âÃÊ·Î ¾²ÀÏ ¼ö
ÀÖÀ» °ÍÀÌ´Ù.
¸¸¾à ÄÚ¸àÆ®³ª Á¦¾ÈÇÏ°í ½ÍÀº °ÍÀÌ ÀÖÀ¸¸é, ¸ÞÀÏÀ» ½áÁֱ⠹ٶõ´Ù.
Ryan Teixeira
C++ À¯Æ¿¸®Æ¼µé
C++ À¯Æ¿¸®Æ¼¸¦ À§ÇÑ ´ÙÀ½ »çÀÌÆ®¸¦ ¹æ¹®Çغ¸¶ó.
Portable C++ utilities from http://www.boost.org.
Boost À¥»çÀÌÆ®´Â ÀÌ½Ä °¡´ÉÇÑ C++ ¼Ò½º ¶óÀ̺귯¸®¸¦ Á¦°øÇÑ´Ù.
Áß¿äÇÑ Á¡Àº ÀÌ ¶óÀ̺귯¸®°¡ C++ Ç¥ÁØ ¶óÀ̺귯¸®¿Í ÇÔ²² Àß µ¿ÀÛÇÑ´Ù´Â °ÍÀÌ´Ù.
ÀÌ ¸ñÀûÀº "¾²ÀÏ ¼ö ÀÖ´Â ½ÇÁ¦ÀûÀÎ °Í"À» ¸¸µéÀÚ´Â °ÍÀ¸·Î,
½ÇÁ¦ ±¸Çö¿¡ Âü°í»çÇ×ÀÌµÉ ¼ö ÀÖ´Ù. µû¶ó¼ Boost ¶óÀ̺귯¸®´Â
ÃÖÁ¾ Ç¥ÁØÈ¿¡ ÀûÀýÇÒ °ÍÀÌ´Ù.
The smart pointer library ( http://www.boost.org/libs/smart_ptr/index.htm )
´Â ´Ù¼¸°¡Áö smart pointer class template¸¦ Á¦°øÇÑ´Ù.
smart pointer´Â C++ÀÇ new Ç¥ÇöÀ¸·Î ÇÒ´çµÇ´Â µ¿Àû ¸Þ¸ð¸®ÀÇ °ü¸®¸¦
½±°Ô ÇØÁØ´Ù.
Ãß°¡·Î scoped_ptr´Â ´Ù¸¥ ¹æ¹ýµé·Î ÇÒ´çµÇ´Â µ¿Àû ¸Þ¸ð¸® °ü¸®¸¦
½±°Ô ÇØÁØ´Ù.
C++ Binary File I/O
http://www.angelfire.com/country/aldev0/cpphowto/cpp_BinaryFileIO.html
Portability Guide
http://www.angelfire.com/country/aldev0/cpphowto/cpp_PortabilityGuide.html
Snippets collections of C++ routines
http://www.angelfire.com/country/aldev0/cpphowto/cpp_Snippets.html
¿Í snippets site
escape ISB for C++ -
ÇÁ·Î±×·¥À» ¾î¶»°Ô °³¹ßÇϰí, ºÐ»êó¸®, °´Ã¼±â¹Ý ¾îÇø®ÄÉÀ̼ÇÀ»
Netscape Internet Service Broker¸¦ »ç¿ëÇÏ´Â À©µµ¿ì¿Í À¯´Ð½º¿¡¼
¾î¶»°Ô °³¹ßÇÏ´ÂÁö¿¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇÑ´Ù.
http://docs.iplanet.com/docs/manuals/enterprise/cpluspg/contents.htm
Common C++ http://www.voxilla.org/projects/projape.html
Large List of free C++ libs
http://www.thefreecountry.com/developercity/freelib.html
C++ Tools http://development.freeservers.com
C++ Tools CUJ http://www.cuj.com/code
C++libs Univ of vaasa http://garbo.uwasa.fi/pc/c-lang.html
¸Þ¸ð¸® Åø
¾Æ·¡ÀÇ ¸Þ¸ð¸® µð¹ö±ë ÅøµéÀ» »ç¿ëÇ϶ó.
"MPatrol" Àº °·ÂÇÑ ¸Þ¸ð¸® µð¹ö±ë ÅøÀÌ´Ù.
À¥»çÀÌÆ® : http://www.cbmamiga.demon.co.uk/mpatrol
, ±×¸®°í http://www.rpmfind.net ¿¡ °¡¼ 'mpatrol'·Î ã¾Æº¸¾Æ¶ó.
¸¸¾à, ¸®´ª½º¸¦ »ç¿ëÇϰí ÀÖ´Ù¸é, mpatrol*.src.rpm ÆÄÀÏÀ» rpmfind.net¿¡¼ ´Ù¿î·Îµå ¹Þ¾Æ¶ó.
mpatrol*.src.rpmÀ» ÃֽŹöÀüÀ¸·Î ¾÷µ¥ÀÌÆ® Çϱâ À§Çؼ´Â, ¿¾³¯ mpatrol.spec ÆÄÀÏÀ»
»ç¿ëÇÏ¿© ÃÖ½ÅÀÇ mpatrol*.tar.gzÀ» »õ·Î¿î ¼Ò½ºÆÐŰÁö(SRPM)À¸·Î ¸¸µé ¼ö ÀÖ´Ù.
¸®´ª½º ¹èÆ÷ÆÇ ¾¾µð·Ò¿¡¼ mem_test*.rpm ÆÐŰÁö¸¦ º¸¾Æ¶ó.
±×¸®°í http://www.rpmfind.net À¸·Î °¡¼ mem_test ·Î ã¾Æº¸¾Æ¶ó.
¸®´ª½º ¹èÆ÷ÆÇ ¾¾µð·Ò¿¡¼ ElectricFence*.rpm ÆÐŰÁö¸¦ º¸¾Æ¶ó.
±×¸®°í http://www.rpmfind.net À¸·Î °¡¼ electricfence·Î ã¾Æº¸¾Æ¶ó.
Purify Tool from Rational Software Corp http://www.rational.com
Insure++ Tool from Parasoft Corp http://www.parasoft.com
Linux Tools : http://www.xnet.com/~blatura/linapp6.html#tools
Google, Yahoo, Lycos, Excite, Mamma.com °°Àº ¼Ä¡¿£ÁøÀ¸·Î °¡¼
"Linux memory debugging tools"¶ó´Â Ű¿öµå·Î ã¾Æº¸¾Æ¶ó.
ÀÌ ¹®¼ÀÇ ´Ù¸¥ Æ÷¸Ë
ÀÌ ¹®¼´Â 14°¡Áö Æ÷¸ËÀ¸·Î ¹èÆ÷µÈ´Ù. - DVI, Postscript, Latex, Adobe Acrobat PDF,
LyX, GNU-info, HTML, RTF(Rich Text Format), Plain-text, Unix man pages, ÇϳªÀÇ
HTMLÆÄÀÏ, SGML (linuxdoc format), SGML (Docbook format), MS WinHelp Æ÷¸Ë.
ÀÌ howto ¹®¼´Â
http://www.linuxdoc.org
¿¡¼ HOWTOs¸¦ ´©¸£°í, À¥ºê¶ó¿ìÀú¿¡¼ CTRL+f ³ª ALT+f¸¦ ÀÌ¿ëÇØ howto À̸§À» ³Ö¾î¼
ãÀ» ¼ö ÀÖ´Ù.
¶ÇÇÑ, ´ÙÀ½ ¹Ì·¯»çÀÌÆ®¿¡¼µµ ãÀ» ¼ö ÀÖ´Ù -
http://www.caldera.com/LDP/HOWTO
http://www.linux.ucla.edu/LDP
http://www.cc.gatech.edu/linux/LDP
http://www.redhat.com/mirrors/LDP
¶Ç´Â ´ÙÀ½ ÆäÀÌÁö¿¡¼ °¡±î¿î ¹Ì·¯»çÀÌÆ®¸¦ ã¾Æº¼ ¼öµµ ÀÖ´Ù.
http://www.linuxdoc.org/mirrors.html
site¸¦ Çϳª °ñ¶ó¼ /LDP/HOWTO/xxxx-HOWTO.htmlÀ» ã¾Æ°¡¸é µÈ´Ù.
ÀÌ ¹®¼ÀÇ HTML, DVI, Postscript ȤÀº SGML ÆÄÀÏÀÇ tar-ballÀ»
´ÙÀ½ ÁÖ¼Ò¿¡¼ ¹ÞÀ» ¼ö ÀÖ´Ù.
ftp://www.linuxdoc.org/pub/linux/docs/HOWTO/other-formats/
¿Í http://www.linuxdoc.org/docs.html#howto
Plain text Æ÷¸ËÀº : ftp://www.linuxdoc.org/pub/linux/docs/HOWTO
¿Í http://www.linuxdoc.org/docs.html#howto
ÇϳªÀÇ HTML ÆÄÀÏÀº :
http://www.linuxdoc.org/docs.html#howto
ÇϳªÀÇ HTML ÆÄÀÏÀº ´ÙÀ½ÀÇ ¸í·ÉÀ¸·Î ¸¸µé¾îÁú ¼ö ÀÖ´Ù. (sgml2htmlÀÇ man page¸¦ º¸¶ó)
sgml2html -split 0 xxxxhowto.sgml
ÇÁ¶û½º¾î, µ¶ÀϾî, ½ºÆäÀξî, Áß±¹¾î, ÀϺ»¾î µîÀÇ ¹ø¿ªÀº
ftp://www.linuxdoc.org/pub/linux/docs/HOWTO
¿Í http://www.linuxdoc.org/docs.html#howto
¿¡¼ ãÀ» ¼ö ÀÖ´Ù.
¶Ç ´Ù¸¥ ¾ð¾î·ÎÀÇ ¹ø¿ª¶ÇÇÑ È¯¿µÇÑ´Ù.
ÀÌ ¹®¼´Âhttp://www.sgmltools.org¿¡¼ ãÀ» ¼ö ÀÖ´Â "SGML-Tools"·Î ¾²¿©Á³´Ù.
¼Ò½º¸¦ ÄÄÆÄÀÏÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù.
sgml2html xxxxhowto.sgml (html ¸¸µé±â)
sgml2html -split 0 xxxxhowto.sgml (ÇϳªÀÇ html file·Î ¸¸µé±â)
sgml2rtf xxxxhowto.sgml (RTF file¸¸µé±â)
sgml2latex xxxxhowto.sgml (latex file¸¸µé±â)
Acrobat PDF Æ÷¸Ë
PDF ÆÄÀÏÀº acrobatÀÇ distillÀ̳ª
Ghostscript¸¦ »ç¿ëÇØ¼ Postscript ÆÄÀϷκÎÅÍ ¸¸µé ¼ö ÀÖ´Ù.
±×¸®°í Postscript ÆÄÀÏÀº LaTex ÆÄÀϷκÎÅÍ ¸¸µé¾îÁö´Â DVIÆÄÀÏ·Î ¸¸µé ¼ö ÀÖ´Ù.
distill ¼ÒÇÁÆ®¿þ¾î´Â
http://www.adobe.com.
¿¡¼ ¹ÞÀ» ¼ö ÀÖ´Ù.
¾Æ·¡ÀÇ ¿¹Á¦¸¦ º¸¶ó.
bash$ man sgml2latex
bash$ sgml2latex filename.sgml
bash$ man dvips
bash$ dvips -o filename.ps filename.dvi
bash$ distill filename.ps
bash$ man ghostscript
bash$ man ps2pdf
bash$ ps2pdf input.ps output.pdf
bash$ acroread output.pdf &
ȤÀº ps2pdf °°Àº Ghostsciprt ¸í·É¾î¸¦
»ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ps2pdf´Â AdobeÀÇ Acrobat Distiller¿Í °ÅÀÇ °°Àº ¿ªÇÒÀ»
ÇÑ´Ù (Áï, PostScript ÆÄÀÏÀ» PDF·Î ¹Ù²Û´Ù)
ps2pdf ´Â Ghostscript¸¦ ½ÇÇà½Ã۰í,
pdfwrite¶ó´Â Ưº°ÇÑ "Ãâ·ÂÀåÄ¡"¸¦ »ç¿ëÇÏ´Â
ÀÛÀº ½ºÅ©¸³Æ®ÀÌ´Ù. ps2pdf¸¦ »ç¿ëÇϱâ À§Çؼ´Â pdfwrite ÀåÄ¡°¡ Ghostscript ÄÄÆÄÀÏ ½Ã¿¡
Makefile¿¡ Æ÷ÇԵǾîÀÖ¾î¾ß ÇÑ´Ù.
ÀÚ¼¼ÇÑ ³»¿ëÀº ÇØ´ç ¹®¼¸¦ º¸µµ·Ï ÇØ¶ó.
linuxdoc À» Docbook Æ÷¸ËÀ¸·Î ¹Ù²Ù±â
ÀÌ ¹®¼´Â linuxdoc SGML Æ÷¸ËÀ¸·Î ¾²¿©Á³´Ù. Docbook SGML Æ÷¸ËÀº
linuxdoc Æ÷¸ËÀ» Æ÷ÇÔÇϰí, ´õ ¸¹Àº ±â´ÉÀ» °®°í ÀÖ´Ù.
linuxdocÀº °£´ÜÇÏ°í »ç¿ëÇϱ⠽±´Ù. linuxdoc SGMLÆÄÀÏÀ»
Docbook SGML·Î ¹Ù²Ù·Á¸é ld2db.sh ÇÁ·Î±×·¥°ú
¸î¸î perl ½ºÅ©¸³Æ®¸¦ »ç¿ëÇØ¶ó.
ld2db¿¡¼ ¾ò¾îÁö´Â °ÍÀº 100% ±ú²ýÇÑ °ÍÀÌ ¾Æ´Ï°í,
clean_ld2db.pl perl ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÒ
Çʿ伺ÀÌ »ý±ä´Ù. ¶ÇÇÑ, Á÷Á¢ ¹®¼¿¡¼ ¸î¸îÀ» °íÃľßÇÒ ¼öµµ ÀÖ´Ù.
ld2db ÇÁ·Î±×·¥Àº http://www.dcs.gla.ac.uk/~rrt/docbook.html
À̳ª Milkyway Galaxy site¿¡¼ ¹ÞÀ¸¸é µÈ´Ù.
cleanup_ld2db.pl perl script ´Â
Milkyway Galaxy site¿¡¼ ¹ÞÀ¸¸é µÈ´Ù.
ld2db.sh ´Â 100% ±ú²ýÇÏÁö ¾Ê¾Æ¼, ´ÙÀ½ °ú°°ÀÌ ½ÇÇàÇÏ·Á¸é ¿¡·¯°¡ ³¯ °ÍÀÌ´Ù.
bash$ ld2db.sh file-linuxdoc.sgml db.sgml
bash$ cleanup.pl db.sgml > db_clean.sgml
bash$ gvim db_clean.sgml
bash$ docbook2html db.sgml
¶ÇÇÑ, perl ½ºÅ©¸³Æ®¸¦ µ¹¸° ÈÄ¿¡ ¸î¸î ÀÛÀº ¿¡·¯¸¦ °íÄ¡°í ½Í±âµµ ÇÒ °ÍÀÌ´Ù.
¿¹¸¦µé¾î, </Para>¸¦ ¸Å <Listitem>¸¶´Ù ³ÖÀ» Çʿ䰡 ÀÖÀ» ¼öµµ ÀÖ´Ù.
MS WinHelp Æ÷¸ËÀ¸·Î ¹Ù²Ù±â
SGML Howto¸¦ Microsoft Windows Help ÆÄÀÏ·Î ¹Ù²Ü ¼öµµ ÀÖ´Ù.
¸ÕÀú, sgmlÀ» ´ÙÀ½°ú °°ÀÌ html·Î ¹Ù²ã¶ó.
bash$ sgml2html xxxxhowto.sgml (html ÆÄÀÏ ¸¸µé±â)
bash$ sgml2html -split 0 xxxxhowto.sgml (ÇϳªÀÇ html ÆÄÀÏ·Î ¸¸µé±â)
±×¸®°í HtmlToHlpÀ̶ó´Â ÅøÀ» ¾²¸é µÈ´Ù.
¶ÇÇÑ, winhelp ÆÄÀÏÀ» ¸¸µé±â À§ÇØ sgml2rtf¸¦ ¾´´ÙÀ½, RTFÆÄÀÏÀ» ¾µ ¼öµµ ÀÖ´Ù.
¿©·¯°¡Áö Æ÷¸ËÀÇ ¹®¼¸¦ Àбâ
dvi Æ÷¸ËÀÇ ¹®¼¸¦ º¸±â À§Çؼ´Â, xdvi ÇÁ·Î±×·¥À» »ç¿ëÇØ¶ó.
xdvi ÇÁ·Î±×·¥Àº Redhat ¸®´ª½ºÀÇ °æ¿ì ControlPanel | Applications | Publishing | Tex menu ¹öư¿¡ ÀÖ°í, tetex-xdvi*.rpm ÆÐŰÁö¿¡ µé¾îÀÖ´Ù.
dvi ¹®¼¸¦ ÀÐÀ¸·Á¸é ´ÙÀ½°ú °°Àº ¸í·ÉÀ» ¾²¸é µÈ´Ù.
xdvi -geometry 80x90 howto.dvi
man xdvi
±×¸®°í À©µµ¿ì Å©±â¸¦ ¸¶¿ì½º·Î Á¶Á¤ ÇÑ´Ù.
À̸®Àú¸® »ìÇ¥º¸±â À§Çؼ´Â È»ìǥŰ³ª PageUp, PageDownŰ, ±×¸®°í
'f', 'd', 'u', 'c', 'l', 'r', 'p', 'n' Ű µîÀ» À§, ¾Æ·¡ Áß¾ÓÀ¸·Î ¿òÁ÷À̰ųª
´ÙÀ½ÆäÀÌÁö, ÀÌÀüÆäÀÌÁö µîÀ¸·Î ³Ñ±â±â À§ÇØ ¾µ ¼ö ÀÖ´Ù.
expert ¸Þ´º¸¦ ²ô±â À§Çؼ´Â 'x'¸¦ ´©¸£¸é µÈ´Ù.
Postscript ÆÄÀÏÀ» Àбâ À§Çؼ´Â 'gv'(ghostview)ÇÁ·Î±×·¥À̳ª 'ghostscript'¸¦
¾²¸é µÈ´Ù.
ghostscript ÇÁ·Î±×·¥Àº ghostscript*.rpm ÆÐŰÁö¿¡ ÀÖ°í, gv ÇÁ·Î±×·¥Àº
gv*.rpm ÆÐŰÁö¿¡ µé¾îÀÖ´Ù. À̵éÀº
ControlPanel | Applications | Graphics menu ¹öư¿¡ ÀÖ´Ù.
gv ÇÁ·Î±×·¥ÀÌ ghostscriptº¸´Ù ÈξÀ »ç¿ëÇÏ±â ÆíÇÏ´Ù.
ghostscript¿Í gv ´Â À©µµ¿ì³ª OS/2 µî ´Ù¸¥ Ç÷§Æû¿¡¼µµ »ç¿ë°¡´ÉÇÏ´Ù.
À©µµ¿ì, OS/2µî ¸ðµç OS¸¦ À§ÇÑ ghostsciprt´Â ´ÙÀ½ »çÀÌÆ®¿¡ ÀÖ´Ù.
http://www.cs.wisc.edu/~ghost
Postscript ¹®¼¸¦ Àбâ À§Çؼ´Â ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù -
gv howto.ps
ghostscript howto.ps
HTML Æ÷¸ä ¹®¼´Â Netscape Navigator, Microsoft Internet explorer,
Redhat Baron Web browser ³ª ´Ù¸¥ À¥ºê¶ó¿ìÀú·Î ÀÐÀ¸¸é µÈ´Ù.
latex, LyX ´Â latexÀÇ X-Window ÇÁ·ÐÆ®¿£µåÀÎ LyX ·Î ÀÐÀ¸¸é µÈ´Ù.
´Ù¸¥ ¾ð¾î·ÎÀÇ ¹ø¿ª
Æú¶õµå¾î·ÎÀÇ ¹ø¿ªÀº http://strony.wp.pl/wp/chq/c/howto/book1.htm¿¡ ÀÖ´Ù. ( Darek Ostolski ¿¡°Ô °¨»ç~ :
Darek Ostolski )
ÇÁ¶û½º¾î³ª µ¶ÀϾî, ½ºÆäÀξî, Áß±¹¾î, ÀϺ»¾î µîÀ¸·ÎÀÇ ¹ø¿ªÀº
ftp://www.linuxdoc.org/pub/linux/docs/HOWTO
³ª http://www.linuxdoc.org/docs.html#howto¿¡¼ ãÀ¸¸é µÈ´Ù.
´Ù¸¥ ¾ð¾î·ÎÀÇ ¹ø¿ªÀº ȯ¿µÇÑ´Ù.
Copyright
Copyright´Â LDP(¸®´ª½º ¹®¼È ÇÁ·ÎÁ§Æ®)¿¡ µû¶ó GNU/GPLÀÌ´Ù.
LDP´Â GNU/GPL ÇÁ·ÎÁ§Æ® ÀÌ´Ù.
ºÎ°¡ÀûÀÎ ¿ä±¸»çÇ×Àº ÀúÀÚÀÇ À̸§°ú À̸ÞÀÏÁÖ¼Ò, ÀÌ Copyright ¸¦ ¾ðÁ¦³ª
Æ÷ÇÔ½ÃÄÑ´Þ¶ó´Â °ÍÀÌ´Ù.
¸¸¾à º¯°æÀ̳ª Ãß°¡ÇÒ »çÇ×ÀÌ ÀÖÀ¸¸é ÀÌ ¹®¼ÀÇ ÀúÀڵ鿡°Ô ¾Ë·ÁÁֱ⠹ٶõ´Ù.
ÀÌ ¹®¼¿¡ ¾ð±ÞµÈ ȸ»çÀ̸§À̳ª »óÇ¥´Â °¢°¢ ±× ¼ÒÀ¯ÁÖÀÇ °ÍÀÌ´Ù.
Copyright policy is GNU/GPL as per LDP (Linux Documentation project).
LDP is a GNU/GPL project.
Additional requests are that you retain the author's name, email address
and this copyright notice on all the copies. If you make any changes
or additions to this document then you please
intimate all the authors of this document.
Brand names mentioned in this document are property of their respective
owners.
ºÎ·Ï A String ÇÁ·Î±×·¥ ÆÄÀÏ
¸ðµç ÇÁ·Î±×·¥ ÆÄÀÏÀ» ÇϳªÀÇ tar.gz À¸·Î
¿¡¼ ¹ÞÀ» ¼ö ÀÖ´Ù.
±×¸®°í ¾ÐÃàÀ» ´ÙÀ½°ú °°ÀÌ Ç®¸é µÈ´Ù.
bash$ man tar
bash$ tar ztvf C++Programming-HOWTO.tar.gz
ÀÌ´Â ¾ÐÃàµÈ ÆÄÀϵéÀ» º¸¿©ÁÙ °ÍÀÌ´Ù.
bash$ tar zxvf C++Programming-HOWTO.tar.gz
ÀÌ´Â ¾ÐÃàÀ» ½ÇÁ¦·Î Ç® °ÍÀÌ´Ù.
Çì´õÆÄÀÏÀ» ¸ÕÀú Àаí, ¿¹Á¦ cppÆÄÀÏÀ» º¸¾Æ¶ó.
String.h
http://www.angelfire.com/country/aldev0/cpphowto/String.h
StringBuffer.h
http://www.angelfire.com/country/aldev0/cpphowto/StringBuffer.h
StringTokenizer.h
http://www.angelfire.com/country/aldev0/cpphowto/StringTokenizer.h
StringRW.h
http://www.angelfire.com/country/aldev0/cpphowto/StringRW.h
string_multi.h
http://www.angelfire.com/country/aldev0/cpphowto/string_multi.h
example_String.cpp
example_String.cpp
'Source code of C++ howto'À» Ŭ¸¯Çضó.
ÆÄÀÏ °ü¸® class. length() ÇÔ¼ö¸¸ ±¸ÇöµÇ¾ú´Ù.
File.h
http://www.angelfire.com/country/aldev0/cpphowto/File.h
File.cpp
File.cpp
'Source code of C++ howto'¸¦ Ŭ¸¯Ç϶ó.
zap() ÇÔ¼öÀÇ ±¸ÇöÀº ¾Æ·¡ ¸µÅ©¿¡ ÀÖ´Ù.
my_malloc.h
http://www.angelfire.com/country/aldev0/cpphowto/my_malloc.h
my_malloc.cpp
my_malloc.cpp
'Source code of C++ howto'¸¦ Ŭ¸¯Çضó.
String classÀÇ ±¸Çö.
String.cpp
String.cpp
'Source code of C++ howto'¸¦ Ŭ¸¯Çضó.
StringTokenizer.cpp
StringTokenizer.cpp
'Source code of C++ howto'¸¦ Ŭ¸¯Çضó.
StringBuffer.cpp
StringBuffer.cpp
'Source code of C++ howto'¸¦ Ŭ¸¯Çضó.
StringRW.cpp
StringRW.cpp
'Source code of C++ howto'¸¦ Ŭ¸¯Çضó.
µð¹ö±ë µµ±¸µé ..
debug.h
http://www.angelfire.com/country/aldev0/cpphowto/debug.h
debug.cpp
debug.cpp
'Source code of C++ howto'¸¦ Ŭ¸¯Çضó.
Makefile.unx
http://www.angelfire.com/country/aldev0/cpphowto/Makefile.unx
String classÀÇ ÀÛµ¿À» Å×½ºÆ®Çϱâ À§ÇÑ ¿¹½Ã¿ë ÀÚ¹Ù ÆÄÀÏ.
string.java
http://www.angelfire.com/country/aldev0/cpphowto/string.java