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.faqs.org/docs/Linux-HOWTO/C++Programming-HOWTO.html ¿¡¼­ ±¸ÇÒ ¼ö ÀÖ´Ù) ÀÌ ¹®¼­ÀÇ ¸ñÀûÀº 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 ¹ÙÀÌÆ®ÄÚµå´Â ÄÄÆÄÀÏµÈ ½ÇÇàÄڵ庸´Ù ´À¸®°í, 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 DeadLink ¾î¶² °ÍÀ» ¼±ÅÃÇÒ °ÍÀΰ¡. 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´Â ¿¡¼­ º¼ ¼ö ÀÖ°í, ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â PHP °ø½Ä ȨÆäÀÌÁö¸¦ Âü°íÇÏ¸é µÈ´Ù. ÇöÀç 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://milkyway.has.it/ ·Î °¡¼­ "Source code C++ Programming howto" (Milkyway Galaxy site) ¸¦ ´­·¯¶ó. ¹Ì·¯ »çÀÌÆ®´Â ´ÙÀ½°ú °°´Ù - http://24.221.230.253/. ¾î¶»°Ô ÀúÀÚÀÇ 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ÇÑ´Ù. <Emphasis remap="bf">¹®ÀÚ¿­ °Ë»ö ¸â¹ö ÇÔ¼ö</Emphasis> ¸â¹ö ÇÔ¼ö ÀÛµ¿ 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¿¡ ´ëÇØ ¶È°°Àº (ȤÀº ¸Å¿ì ºñ½ÁÇÑ) ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÑ´Ù (±×·¯³ª ¹°·Ð ±× ³»ºÎ ±¸ÇöÀº ´Ù¸¦ °ÍÀÌ´Ù). ¾Æ·¡ÀÇ Ç¥´Â ¿ì¸®°¡ »ìÆ캼 ÇÔ¼öµéÀ» ³ª¿­ÇÑ °ÍÀÌ´Ù. º°Ç¥´Â ±× ÄÁÅ×ÀÌ³Ê Å¸ÀÔÀÌ ±× À̸§ÀÇ ¸â¹ö ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù´Â °ÍÀÌ´Ù. <Emphasis remap="bf">ÄÁÅ×ÀÌ³Ê Class ÀÎÅÍÆäÀ̽º</Emphasis> ¿¬»êÀÚ/ÇÔ¼ö¸í ¸ñÀû 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 DeadLink StringBuffer.h http://www.angelfire.com/country/aldev0/cpphowto/StringBuffer.h DeadLink StringTokenizer.h http://www.angelfire.com/country/aldev0/cpphowto/StringTokenizer.h DeadLink StringRW.h http://www.angelfire.com/country/aldev0/cpphowto/StringRW.h DeadLink string_multi.h http://www.angelfire.com/country/aldev0/cpphowto/string_multi.h DeadLink example_String.cpp example_String.cpp 'Source code of C++ howto'À» Ŭ¸¯Çضó. ÆÄÀÏ °ü¸® class. length() ÇÔ¼ö¸¸ ±¸ÇöµÇ¾ú´Ù. File.h http://www.angelfire.com/country/aldev0/cpphowto/File.h DeadLink File.cpp File.cpp 'Source code of C++ howto'¸¦ Ŭ¸¯Ç϶ó. zap() ÇÔ¼öÀÇ ±¸ÇöÀº ¾Æ·¡ ¸µÅ©¿¡ ÀÖ´Ù. my_malloc.h http://www.angelfire.com/country/aldev0/cpphowto/my_malloc.h DeadLink 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 DeadLink debug.cpp debug.cpp 'Source code of C++ howto'¸¦ Ŭ¸¯Çضó. Makefile.unx http://www.angelfire.com/country/aldev0/cpphowto/Makefile.unx DeadLink String classÀÇ ÀÛµ¿À» Å×½ºÆ®Çϱâ À§ÇÑ ¿¹½Ã¿ë ÀÚ¹Ù ÆÄÀÏ. string.java http://www.angelfire.com/country/aldev0/cpphowto/string.java DeadLink