ºìÁªLinuxÃÅ»§
Linux°ïÖú

Linux ±à³ÌÖ®C++ÓÎÏ·³ÌÐòÓÅ»¯

·¢²¼Ê±¼ä:2006-06-14 11:20:47À´Ô´:ºìÁª×÷Õß:google
¡¡¡¡ Ò»°ã¶øÑÔ£¬±ÈÆðC³ÌÐòÀ´Ëµ£¬C++ÓÎÏ·³ÌÐòÊÇ¿ÉÖØÓúͿÉά»¤µÄ¡£¿ÉÕâÕæµÄÓмÛÖµÂ𣿸´ÔÓµÄC++¿ÉÒÔÔÚËÙ¶ÈÉÏÓ봫ͳµÄC³ÌÐòÏàÌá²¢ÂÛÂð£¿
¡¡¡¡ Èç¹ûÓÐÒ»¸öºÃµÄ±àÒëÆ÷£¬ÔÙ¼ÓÉ϶ÔÓïÑÔµÄÁ˽⣬ÕæµÄÓпÉÄÜÓÃC++д³öһЩÓÐЧÂʵÄÓÎÏ·³ÌÐòÀ´¡£±¾ÎÄÃèÊöÁ˵äÐ͵ļ¸ÖÖÄã¿ÉÒÔÓÃÀ´¼ÓËÙÓÎÏ·µÄ¼¼Êõ¡£Ëü¼ÙÉèÄãÒѾ­·Ç³£¿Ï¶¨Ê¹ÓÃC++µÄºÃ´¦£¬²¢ÇÒÄãÒ²¶ÔÓÅ»¯µÄ»ù±¾¸ÅÄîÏ൱ÊìϤ¡£
¡¡¡¡ µÚÒ»¸ö¾­³£ÈÃÈË»ñÒæµÄ»ù±¾¸ÅÄîÏÔÈ»ÊÇÆÊÎö£¨profiling£©µÄÖØÒªÐÔ¡£È±·¦ÆÊÎöµÄ»°£¬³ÌÐòÔ±½«·¸Á½ÖÖ´íÎó£¬ÆäÒ»ÊÇÓÅ»¯ÁË´íÎóµÄ´úÂ룺Èç¹ûÒ»¸ö³ÌÐòµÄÖ÷ÒªÖ¸±ê²»ÊÇЧÂÊ£¬ÄÇôһÇл¨ÔÚʹÆä¸ü¸ßЧÉϵÄʱ¼ä¶¼ÊÇÀË·Ñ¡£¿¿Ö±¾õÀ´ÅжÏÄĶδúÂëµÄÖ÷ÒªÖ¸±êÊÇЧÂÊÊDz»¿ÉÐŵģ¬Ö»ÓÐÖ±½ÓÈ¥²âÁ¿¡£µÚ¶þ¸ö¸ÅÄîÊdzÌÐòÔ±¾­³£¡°ÓÅ»¯¡±µ½½µµÍÁË´úÂëµÄËٶȡ£ÕâÔÚC++ÊÇÒ»¸öµäÐÍÎÊÌ⣬һ¸ö¼òµ¥µÄÖ¸ÁîÐпÉÄÜ»á²úÉú¾Þ´óÊýÁ¿µÄ»úÆ÷´úÂ룬ÄãÓ¦µ±¾­³£¼ì²éÄãµÄ±àÒëÆ÷µÄÊä³ö£¬²¢ÇÒÆÊÎöÖ®¡£

1¡¢¶ÔÏóµÄ¹¹ÔìÓëÎö¹¹
¡¡¡¡ ¶ÔÏóµÄ¹¹ÔìÓëÎö¹¹ÊÇC++µÄºËÐĸÅÄîÖ®Ò»£¬Ò²ÊDZàÒëÆ÷±³×ÅÄã²úÉú´úÂëµÄÒ»¸öÖ÷ÒªµØ·½¡£Î´¾­ÈÏÕæÉè¼ÆµÄ³ÌÐò¾­³£»¨·Ñ²»ÉÙʱ¼äÔÚµ÷Óù¹Ô캯Êý£¬¿½±´¶ÔÏóÒÔ¼°³õʼ»¯ÁÙʱ¶ÔÏóµÈµÈ¡£ÐÒÔ˵ÄÊÇ£¬Ò»°ãµÄ¸Ð¾õºÍ¼¸Ìõ¼òµ¥µÄ¹æÔò¿ÉÒÔÈóÁÖصĶÔÏó´úÂëÅܵúÍCÖ»ÓкÁÀåÖ®²î¡£
¡¡¡¡ ³ý·ÇÐèÒª·ñÔò²»¹¹Ôì¡£
¡¡¡¡ ×î¿ìµÄ´úÂëÊǸù±¾²»ÔËÐеĴúÂ롣ΪʲôҪ´´½¨Ò»¸öÄã¸ù±¾²»È¥Ê¹ÓõĶÔÏóÄØ£¿ÔÚºóÃæµÄ´úÂëÖУº

¡¡¡¡ voide Function(int arg)
¡¡¡¡ {
¡¡¡¡¡¡¡¡ Object boj;
¡¡¡¡¡¡¡¡ If(arg==0)
¡¡¡¡¡¡¡¡¡¡¡¡ Return;
¡¡¡¡¡¡¡¡ ...
¡¡¡¡ }

¡¡¡¡ ¼´±ãargΪ0£¬ÎÒÃÇÒ²¸¶³öÁ˵÷ÓÃObjectµÄ¹¹Ô캯ÊýµÄ´ú¼Û¡£ÌرðÊÇÈç¹ûarg¾­³£ÊÇ0£¬²¢ÇÒObject±¾Éí»¹·ÖÅäÄڴ棬ÕâÖÖÀË·Ñ»á¸ü¼ÓÑÏÖØ¡£ÏÔÈ»µÄ£¬½â¾ö·½°¸¾ÍÊÇ°ÑobjµÄ¶¨ÒåÒƵ½ÅжÏÖ®ºó¡£
¡¡¡¡ СÐÄÔÚÑ­»·Öж¨Ò帴ÔÓ±äÁ¿£¬Èç¹ûÔÚÑ­»·Öа´ÕÕ³ý·ÇÐèÒª·ñÔò²»¹¹ÔìµÄÔ­Ôò¹¹ÔìÁ˸´ÔӵĶÔÏó£¬ÄÇôÄãÔÚÿһ´ÎÑ­»·µÄʱºò¶¼Òª¸¶³öÒ»´Î¹¹ÔìµÄ´ú¼Û¡£×îºÃÔÚÑ­»·Íâ¹¹ÔìÖ®ÒÔÖ»¹¹ÔìÒ»´Î¡£Èç¹ûÒ»¸öº¯ÊýÔÚÄÚÑ­»·Öб»µ÷Ó㬶ø¸Ãº¯ÊýÔÚÕ»ÄÚ¹¹ÔìÁËÒ»¸ö¶ÔÏó£¬Äã¿ÉÒÔÔÚÍⲿ¹¹Ôì²¢´«µÝÒ»¸öÓ¦ÓøøËü¡£

¡¡¡¡ 1.1 ²ÉÓóõʼ»¯Áбí
¡¡¡¡ ¿¼ÂÇÏÂÃæµÄÀࣺ

¡¡¡¡ class Vehicle
¡¡¡¡ {
¡¡¡¡ public
¡¡¡¡¡¡¡¡ Vehicle(const std::string &name)
¡¡¡¡¡¡¡¡ {
¡¡¡¡¡¡¡¡¡¡¡¡ mName=name
¡¡¡¡¡¡¡¡ }
¡¡¡¡ private:
¡¡¡¡¡¡¡¡ std::string mName;
¡¡¡¡ }

¡¡¡¡ ÒòΪ³ÉÔ±±äÁ¿»áÔÚ¹¹Ô캯Êý±¾ÌåÖ´ÐÐÇ°¹¹Ô죬Õâ¶Î´úÂëµ÷ÓÃÁËstring mNameµÄ¹¹Ô캯Êý£¬È»ºóµ÷ÓÃÁËÒ»¸ö=²Ù×÷·û£¬À´¿½±´ÆäÖµ¡£Õâ¸öÀý×ÓÖеÄÒ»¸öµäÐ͵IJ»ºÃÖ®´¦ÔÚÓÚstringµÄȱʡ¹¹Ô캯Êý»á·ÖÅäÄڴ棬µ«Êµ¼ÊÉ϶¼»á·ÖÅä´ó´ó³¬¹ýʵ¼ÊÐèÒªµÄ¿Õ¼ä¡£½ÓÏÂÀ´µÄ´úÂë»áºÃЩ£¬²¢ÇÒ×èÖ¹Á˶Ô=²Ù×÷·ûµÄµ÷Ó㬽øÒ»²½µÄÀ´Ëµ£¬ÒòΪ¸ø³öÁ˸ü¶àµÄÐÅÏ¢£¬·Çȱʡ¹¹Ô캯Êý»á¸üÓÐЧ£¬²¢ÇÒ±àÒëÆ÷¿ÉÒÔÔÚ¹¹Ô캯Êýº¯ÊýÌåΪ¿ÕµÄÇé¿öϽ«ÆäÓÅ»¯µô¡£

¡¡¡¡ class Vehicle
¡¡¡¡ {
¡¡¡¡ public
¡¡¡¡¡¡¡¡ Vehicle(const std::string &name):mName(name)
¡¡¡¡¡¡¡¡ { }
¡¡¡¡ private:
¡¡¡¡¡¡¡¡ std::string mName;
¡¡¡¡ }

¡¡¡¡ 1.2 Ҫǰ×ÔÔö²»Òªºó×ÔÔö£¨¼´Òª++I²»ÒªI++£©
¡¡¡¡ µ±Ð´x=y++ʱ²úÉúµÄÎÊÌâÊÇ×ÔÔö¹¦Äܽ«ÐèÒªÖÆÔìÒ»¸ö±£³ÖyµÄÔ­ÖµµÄ¿½±´£¬È»ºóy×ÔÔö£¬²¢°ÑԭʼµÄÖµ·µ»Ø¡£ºó×ÔÔö°üÀ¨ÁËÒ»¸öÁÙʱ¶ÔÏóµÄ¹¹Ô죬¶øÇ°×ÔÔöÔò²»Òª¡£¶ÔÓÚÕûÊý£¬ÕâûÓжîÍâµÄ¸ºµ££¬µ«¶ÔÓÚÓû§×Ô¶¨ÒåÀàÐÍ£¬Õâ¾ÍÊÇÀË·Ñ£¬ÄãÓ¦¸ÃÔÚÓпÉÄܵÄÇé¿öÏÂÔËÓÃÇ°×ÔÔö£¬ÔÚÑ­»·±äÁ¿ÖУ¬Äã»á³£Óöµ½ÕâÖÖÇéÐΡ£
¡¡¡¡ ²»Ê¹ÓÃÓзµ»ØÖµµÄ²Ù×÷·û ÔÚC++Öо­³£¿´µ½ÕâÑùд¶¥µãµÄ¼Ó·¨£º

¡¡¡¡ Vector operator+(const Vector &v1,const Vector &v2)

¡¡¡¡ Õâ¸ö²Ù×÷½«ÒýÆð·µ»ØÒ»¸öеÄVector¶ÔÏó£¬Ëü»¹±ØÐë±»ÒÔÖµµÄÐÎʽ·µ»Ø¡£ËäÈ»ÕâÑù¿ÉÒÔдv=v1+v2ÕâÑùµÄ±í´ïʽ£¬µ«Ïó¹¹ÔìÁÙʱ¶ÔÏóºÍ¶ÔÏóµÄ¿½±´ÕâÑùµÄ¸ºµ££¬¶ÔÓÚÏ󶥵ã¼Ó·¨ÕâÑù³£±»µ÷ÓõÄÊÂÇéÀ´ËµÌ«´óÁËÒ»µã¡£ÓÐʱºòÊÇ¿ÉÒԺúù滮´úÂëÒÔʹ±àÒëÆ÷¿ÉÒÔ°ÑÁÙʱ¶ÔÏóÓÅ»¯µô£¨ÕâÒ»µã¾ÍÊÇËùνµÄ·µ»ØÖµÓÅ»¯£©¡£µ«ÊǸüÆÕ±éµÄÇéÐÎÏ£¬Äã×îºÃ·ÅϼÜ×Ó£¬Ð´Ò»µãÄÑ¿´µ«¸ü¿ìËٵĴúÂ룺

¡¡¡¡ void Vector::Add(const Vector &v1,const Vector &v2)

¡¡¡¡ ×¢Òâ+=²Ù×÷·û²¢Ã»ÓÐͬÑùµÄÎÊÌ⣬ËüÖ»ÊÇÐ޸ĵÚÒ»¸ö²ÎÊý£¬²¢²»ÐèÒª·µ»ØÒ»¸öÁÙʱ¶ÔÏó£¬ËùÒÔ£¬¿ÉÄܵÄÇé¿öÏ£¬ÄãÒ²¿ÉÒÔÓÃ+=´úÌæ+¡£

¡¡¡¡ 1.3 ʹÓÃÇáÁ¿¼¶µÄ¹¹Ô캯Êý
¡¡¡¡ ÔÚÉÏÒ»¸öÀý×ÓÖÐVectorµÄ¹¹Ô캯ÊýÊÇ·ñÐèÒª³õʼ»¯ËüµÄÔªËØΪ0£¿Õâ¸öÎÊÌâ¿ÉÄÜÔÚÄãµÄ´úÂëÖлáÓкü¸´¦³öÏÖ¡£Èç¹ûÊǵĻ°£¬ËüʹµÃÎÞÂÛÊÇ·ñ±ØÒª£¬ËùÓеĵ÷Óö¼Òª¸¶³õʼ»¯µÄ´ú¼Û¡£µäÐ͵ÄÀ´Ëµ£¬ÁÙʱ¶¥µãÒÔ¼°³ÉÔ±±äÁ¿¾Í»áÒªÎÞ¹¼µÄ³ÐÊÜÕâЩ¶îÍâµÄ¿ªÏú¡£
¡¡¡¡ Ò»¸öºÃµÄ±àÒëÆ÷¿ÉÒԺܺõÄÒƳýһЩÕâÖÖ¶àÓàµÄ´úÂ룬µ«ÊÇΪʲôҪðÕâ¸öÏÕÄØ£¿×÷Ϊһ°ãµÄ¹æÔò£¬ÄãÏ£Íû¹¹Ô캯Êý³õʼ»¯ËùÓеijÉÔ±±äÁ¿£¬ÒòΪδ³õʼ»¯µÄÊý¾Ý½«²úÉú´íÎó¡£µ«ÊÇ£¬ÔÚƵ·±ÊµÀý»¯µÄСÀàÖУ¬ÌرðÊÇһЩÁÙʱ¶ÔÏó£¬ÄãÓ¦¸Ã×¼±¸ÏòЧÂʹæÔòÍ×Э¡£Ê×Ñ¡µÄÇé¿ö¾ÍÊÇÔÚÐí¶àÓÎÏ·ÖÐÓеÄvectorºÍMatrixÀ࣬ÕâЩÀàÏÔȻӦµ±ÌṩһЩ·½·¨ÖÃ0ºÍʶ±ð£¬µ«ËüµÄȱʡ¹¹Ô캯ÊýÈ´Ó¦µ±Êǿյġ£
¡¡¡¡ Õâ¸ö¸ÅÄîµÄÍÆÂÛ¾ÍÊÇÄãÓ¦µ±ÎªÕâÖÖÀàÌṩÁíÒ»¸ö¹¹Ô캯Êý¡£Èç¹ûÎÒÃǵĵڶþ¸öÀý×ÓÖеÄVebicleÀàÊÇÕâÑùдµÄ»°£º

¡¡¡¡ class Vehicle
¡¡¡¡ {
¡¡¡¡ public:
¡¡¡¡¡¡¡¡ vehicle()
¡¡¡¡¡¡¡¡ {
¡¡¡¡¡¡¡¡ }
¡¡¡¡¡¡¡¡ void SetName(const std::string &name)
¡¡¡¡¡¡¡¡ {
¡¡¡¡¡¡¡¡¡¡¡¡ mName=name;
¡¡¡¡¡¡¡¡ }
¡¡¡¡ private:
¡¡¡¡¡¡¡¡ std::string mName
¡¡¡¡ };

¡¡¡¡ ÎÒÃÇÊ¡È¥Á˹¹ÔìmNameµÄ¿ªÏú£¬¶øÔÚÉÔºóÓÃSetName·½·¨ÉèÖÃÁËÆäÖµ¡£ÏàËƵģ¬Ê¹Óÿ½±´¹¹Ô캯Êý½«±È¹¹ÔìÒ»¸ö¶ÔÏóÈ»ºóÓÃ=²Ù×÷·ûÒªºÃһЩ¡£ÄþÔ¸ÕâÑùÀ´¹¹Ô죺Vebicle V1(V2)Ò²²»ÒªÕâÑùÀ´¹¹Ô죺

¡¡¡¡ Vehicle v1;v1=v2;

¡¡¡¡ Èç¹ûÄãÐèÒª×èÖ¹±àÒëÆ÷°ïÄ㿽±´¶ÔÏ󣬰ѿ½±´¹¹Ô캯ÊýºÍ²Ù×÷·û=ÉùÃ÷Ϊ˽Óеģ¬µ«²»ÒªÊµÏÖÆäÖÐÈκÎÒ»¸ö¡£ÕâÑù£¬ÈκÎÆóͼ¶Ô¸Ã¶ÔÏóµÄ¿½±´¶¼½«²úÉúÒ»¸ö±àÒëʱ´íÎó¡£×îºÃÒ²Ñø³É¶¨Òåµ¥²ÎÊý¹¹Ô캯ÊýµÄÏ°¹ß£¬³ý·ÇÄãÊÇÒª×öÀàÐÍת»»¡£ÕâÑù¿ÉÒÔ·ÀÖ¹±àÒëÆ÷ÔÚ×öÀàÐÍת»»Ê±²úÉúµÄÒþ²ØµÄÁÙʱ¶ÔÏó¡£

¡¡¡¡ 1.4 Ô¤·ÖÅäºÍCache¶ÔÏó
¡¡¡¡ Ò»¸öÓÎÏ·Ò»°ã»áÓÐһЩÀà»áƵ·±µÄ·ÖÅäºÍÊÍ·Å£¬±ÈÈçÎäÆ÷ʲôµÄ¡£ÔÚC³ÌÐòÖУ¬Äã»á·ÖÅäÒ»¸ö´óÊý×éÈ»ºóÔÚÐèÒªµÄʱºòʹÓá£ÔÚC++ÖУ¬¾­¹ýССµÄ¹æ»®ÒÔºó£¬ÄãÒ²¿ÉÒÔÕâÑù¸É¡£Õâ¸ö·½·¨ÊDz»ÒªÒ»Ö±¹¹ÔìºÍÎö¹¹¶ÔÏó¶øÊÇÇëÇóÒ»¸öжø°Ñ¾ÉµÄ·µ»Ø¸øCache¡£Cache¿ÉÒÔʵÏÖ³ÉÒ»¸öÄ£°å£¬Ëü¾Í¿ÉÒÔΪËùÓеÄÓÐÒ»¸öȱʡ¹¹Ô캯ÊýµÄÀ๤×÷¡£CacheÄ£°åµÄSample¿ÉÒÔÔÚ¸½´øµÄCDÖÐÕÒµ½¡£
¡¡¡¡ ÄãÒ²¿ÉÒÔÔÚÐèҪʱ·ÖÅäһЩ¶ÔÏóÀ´Ìî³äCache£¬»òÕßÔ¤ÏÈ·ÖÅäºÃ¡£Èç¹ûÄ㻹Ҫ¶ÔÕâЩ¶ÔÏóά»¤Ò»¸ö¶ÑÕ»µÄ»°£¨±íʾÔÚÄãɾ³ý¶ÔÏóX֮ǰ£¬ÄãÏÈҪɾ³ýËùÓÐÔÚXºóÃæ·ÖÅäµÄ¶ÔÏ󣩣¬Äã¿ÉÒÔ°ÑCache·ÖÅäÔÚÒ»¸öÁ¬ÐøµÄÄÚ´æ¿éÖС£

2¡¢ÄÚ´æ¹ÜÀí
¡¡¡¡ C++Ó¦ÓóÌÐòÒ»°ãÒª±ÈC³ÌÐò¸üÉîÈëµ½ÄÚ´æ¹ÜÀíµÄϸ½Ú¡£ÔÚCÖУ¬ËùÓеķÖÅ䶼¼òµ¥µÄͨ¹ýmallocºÍfreeÀ´½øÐУ¬¶øC++Ôò»¹¿ÉÒÔͨ¹ý¹¹ÔìÁÙʱ¶ÔÏóºÍ³ÉÔ±±äÁ¿À´ÒþʽµÄ·ÖÅäÄÚ´æ¡£ºÜ¶àC++ÓÎÏ·³ÌÐòÐèÒª×Ô¼ºµÄÄÚ´æ¹ÜÀí³ÌÐò¡£ ÓÉÓÚC++ÓÎÏ·³ÌÐòÒªÖ´ÐкܶàµÄ·ÖÅ䣬ËùÒÔÒªÌرðСÐĶѵÄËéƬ¡£Ò»¸ö·½·¨ÊÇÑ¡ÔñÒ»Ìõ¸´Ôӵķ£ºÒªÃ´ÔÚÓÎÏ·¿ªÊ¼ºó¸ù±¾²»·ÖÅäÈκÎÄڴ棬Ҫôά»¤Ò»¸ö¾Þ´óµÄÁ¬ÐøÄÚ´æ¿é£¬²¢°´ÆÚÊÍ·Å£¨±ÈÈçÔڹؿ¨Ö®¼ä£©¡£ÔÚÏÖ´ú»úÆ÷ÉÏ£¬Èç¹ûÄãÏë¶ÔÄãµÄÄÚ´æʹÓúܾ¯ÌèµÄ»°£¬ºÜÑϸñµÄ¹æÔòÊÇû±ØÒªµÄ¡£
¡¡¡¡ µÚÒ»²½ÊÇÖØÔØnewºÍDelete²Ù×÷·û£¬Ê¹ÓÃ×Ô¼ºÊµÏֵIJÙ×÷·ûÀ´°ÑÓÎÏ·×î¾­³£µÄÄÚ´æ·ÖÅä´Ómalloc¶¨Ïòµ½Ô¤ÏÈ·ÖÅäºÃµÄÄÚ´æ¿éÈ¥£¬ÀýÈ磬Äã·¢ÏÖÄãÈκÎʱºò×î¶àÓÐ10000¸ö4×Ö½ÚµÄÄÚ´æ·ÖÅ䣬Äã¿ÉÒÔÏÈ·ÖÅäºÃ40000×Ö½Ú£¬È»ºóÔÚÐèҪʱÒýÓóöÀ´¡£ÎªÁ˸ú×ÙÄÄЩ¿éÊǿյģ¬¿ÉÒÔά»¤Ò»¸öÓÉÿһ¸ö¿ÕµÄ¿éÖ¸ÏòÏÂÒ»¸ö¿ÕµÄ¿éµÄÁбífree list¡£ÔÚ·ÖÅäµÄʱºò£¬°ÑÇ°ÃæµÄblockÒƵô£¬ÔÚÊͷŵÄʱºò£¬°ÑÕâ¸ö¿Õ¿éÔٷŵ½Ç°ÃæÈ¥¡£Í¼1ÃèÊöÁËÕâ¸öfree listÈçºÎÔÚÒ»¸öÁ¬ÐøµÄÄÚ´æ¿éÖУ¬ÓëһϵÁеķÖÅäºÍÊÍ·ÅЭ×÷µÄÇéÐΡ£


ͼ1 A linked free list


¡¡¡¡ Äã¿ÉÒÔºÜÈÝÒ׵ķ¢ÏÖÒ»¸öÓÎÏ·ÊÇÓÐ×ÅÐí¶àССµÄÉúÃü¶ÌÔݵÄÄÚ´æ·ÖÅ䣬ÄãÒ²ÐíÏ£ÍûΪºÜ¶àС¿é±£Áô¿Õ¼ä¡£ÎªÄÇЩÏÖÔÚûÓÐʹÓõ½µÄ¶«Î÷±£Áô´óÄÚ´æ¿é»áÀ˷ѺܶàÄÚ´æ¡£ÔÚÒ»¶¨µÄ³ß´çÉÏ£¬ÄãÓ¦µ±°ÑÄÚ´æ·ÖÅä½»¸øÒ»Ö§²»Í¬µÄ´óÄÚ´æ·ÖÅ亯Êý»òÊÇÖ±½Ó½»¸ømalloc()¡£

3¡¢Ð麯Êý
¡¡¡¡ C++ÓÎÏ·³ÌÐòµÄÅúÆÀÕß×ÜÊÇ°Ñìͷ¶Ô×¼Ð麯Êý£¬ÈÏΪËüÊÇÒ»¸ö½µµÍЧÂʵÄÉñÃØÌØÐÔ¡£¸ÅÄîÐÔµÄ˵£¬Ð麯ÊýµÄ»úÖƺܼòµ¥¡£ÎªÁËÍê³ÉÒ»¸ö¶ÔÏóµÄÐ麯Êýµ÷Ó㬱àÒëÆ÷·ÃÎʶÔÏóµÄÐ麯Êý±í£¬»ñµÃÒ»¸ö³ÉÔ±º¯ÊýµÄÖ¸Õ룬ÉèÖõ÷Óû·¾³£¬È»ºóÌøתµ½¸Ã³ÉÔ±º¯ÊýµÄµØÖ·ÉÏ¡£Ïà¶ÔÓÚC³ÌÐòµÄº¯Êýµ÷Óã¬C³ÌÐòÔòÊÇÉèÖõ÷Óû·¾³£¬È»ºóÌøתµ½Ò»¸ö¼È¶¨µÄµØÖ·ÉÏ¡£Ò»¸öÐ麯Êýµ÷ÓõĶîÍ⸺µ£ÊÇÐ麯Êý±íµÄ¼ä½ÓÖ¸Ïò£»ÓÉÓÚÊÂÏȲ¢²»ÖªµÀ½«ÒªÌøתµÄµØÖ·£¬ËùÒÔÒ²ÓпÉÄÜÔì³É´¦ÀíÆ÷²»ÄÜÃüÖÐCache¡£
¡¡¡¡ ËùÓÐÕæÕýµÄC++³ÌÐò¶¼¶ÔÐ麯ÊýÓдóÁ¿µÄʹÓã¬ËùÒÔÖ÷ÒªµÄÊÖ¶ÎÊÇ·ÀÖ¹ÔÚÄÇЩ¼«ÆäÖØÊÓЧÂʵĵط½µÄÐ麯Êýµ÷Óá£ÕâÀïÓÐÒ»¸öµäÐ͵ÄÀý×Ó£º

¡¡¡¡ Class BaseClass
¡¡¡¡ {
¡¡¡¡ public:
¡¡¡¡¡¡¡¡ virtual char *GetPointer()=0;
¡¡¡¡ };

¡¡¡¡ Class Class1: public BaseClass
¡¡¡¡ {
¡¡¡¡¡¡¡¡ virtual char *GetPointer();
¡¡¡¡ };

¡¡¡¡ Class Class2:public BaseClass
¡¡¡¡ {
¡¡¡¡¡¡¡¡ virtual char *GetPointer();
¡¡¡¡ };

¡¡¡¡ void Function(BaseClass *pObj)
¡¡¡¡ {
¡¡¡¡¡¡¡¡ char *ptr=pObj->GetPointer();
¡¡¡¡ }

¡¡¡¡ Èç¹ûFunction()¼«ÆäÖØÊÓЧÂÊ£¬ÎÒÃÇÓ¦µ±°ÑGetPointer´ÓÒ»¸öÐ麯Êý¸Ä³ÉÄÚÁªº¯Êý¡£Ò»ÖÖ·½Ê½ÊǸøBaseClassÔö¼ÓÒ»¸öеı£»¤µÄÊý¾Ý³ÉÔ±£¬ÔÚÿһ¸öÀàÖÐÉèÖøóÉÔ±µÄÖµ£¬ÔÚGetPointerÕâ¸öÄÚÁªº¯ÊýÖзµ»Ø¸Ã³ÉÔ±¸øµ÷ÓÃÕߣº

¡¡¡¡ Class BaseClass
¡¡¡¡ {
¡¡¡¡ public:
¡¡¡¡¡¡¡¡ inline char GetPointerFast()
¡¡¡¡¡¡¡¡ {
¡¡¡¡¡¡¡¡¡¡¡¡ return mpPointer;
¡¡¡¡¡¡¡¡ }
¡¡¡¡ protected:
¡¡¡¡¡¡¡¡ inline void SetPointer(char *pData)
¡¡¡¡¡¡¡¡ {
¡¡¡¡¡¡¡¡¡¡¡¡ mpData = pData;
¡¡¡¡¡¡¡¡ }
¡¡¡¡ private:
¡¡¡¡¡¡¡¡ char *mpData;
¡¡¡¡ };

¡¡¡¡ void Function(BaseClass *pObj)
¡¡¡¡ {
¡¡¡¡¡¡¡¡ char *ptr= pObj->GetPointerFast();
¡¡¡¡ }

¡¡¡¡ Ò»¸ö¸ü¼¤½øµÄ·½·¨ÊÇÖØй滮ÄãµÄÀà¼Ì³ÐÊ÷£¬Èç¹ûClass1ºÍClass2Ö»ÓÐÒ»µãµã²»Í¬£¬ÄÇô¿ÉÒÔ°ÑËüÃÇÀ¦°óµ½Í¬Ò»¸öÀàÖÐÈ¥£¬¶øÓÃÒ»¸öFlagÀ´±íÃ÷Ëü½«ÏóClass1»¹ÊÇÏóClass2Ò»Ñù¹¤×÷£¬Í¬Ê±ÔÚBaseClassÖаѴ¿Ð麯ÊýÈ¥µô¡£ÕâÑùµÄ»°£¬Ò²¿ÉÒÔÏóÇ°ÃæµÄÀý×ÓÒ»Ñù°ÑGetPointerд³ÉÄÚÁª¡£ÕâÖÖ±äͨ¿´ÆðÀ´²»ÊǺܸßÑÅ£¬µ«ÊÇÔÚȱÉÙCacheµÄ»úÆ÷ÉÏÅÜÄÚÑ­»·Ê±£¬Äã¿ÉÄÜ»áºÜÔ¸ÒâΪÁËÈ¥µôÐ麯Êýµ÷Óöø°ÑÊÂÇé×öµÃ¸ü¼ÓÄÑ¿´¡£
¡¡¡¡ ËäȻÿһ¸öеÄÐ麯Êý¶¼Ö»¸øÿ¸öÀàµÄÐé±íÔö¼ÓÁËÒ»¸öÖ¸ÕëµÄ³ß´ç£¨Í¨³£ÊÇ¿ÉÒÔºöÂԵĴú¼Û£©£¬µÚÒ»¸öÐ麯Êý»¹ÊÇÔÚÿһ¸ö¶ÔÏóÉÏÒªÇóÁËÒ»¸öÖ¸ÏòÐé±íµÄÖ¸Õë¡£Õâ¾ÍÊÇ˵ÄãÔÚºÜСµÄ¡¢Æµ·±Ê¹ÓõÄÀàÉÏʹÓÃÈκÎÐ麯Êý¶øÔì³ÉÁ˶îÍâµÄ¸ºµ££¬ÕâЩ¶¼ÊDz»ÄܽÓÊܵġ£ÓÉÓڼ̳ÐÒ»°ã¶¼ÒªÓõ½Ò»¸ö»ò¼¸¸öÐ麯Êý£¨ÖÁÉÙÓÐÒ»¸öÐéµÄÎö¹¹º¯Êý£©£¬ËùÒÔÄãû±ØÒªÔÚС¶øƵ·±Ê¹ÓõĶÔÏóÉÏʹÓÃÈκμ̳С£

4¡¢´úÂë³ß´ç
¡¡¡¡ ±àÒëÆ÷ÒòΪC++²úÉúÈß³¤µÄ´úÂë¶ø³ôÃûÕÑÖø¡£ÓÉÓÚÄÚ´æÓÐÏÞ£¬¶øСµÄ¶«Î÷ÍùÍùÊÇ¿ìµÄ£¬ËùÒÔʹÄãµÄ¿ÉÖ´ÐÐÎļþ¾¡¿ÉÄܵÄСÊǷdz£ÖØÒªµÄ¡£Ê×ÏÈ¿ÉÒÔ×öµÄÊÂÇéÊÇÄÃÒ»¸ö±àÒëÆ÷À´Ñо¿¡£Èç¹ûÄãµÄ±àÒëÆ÷»áÔÚ¿ÉÖ´ÐÐÎļþÖб£´æDebugÐÅÏ¢µÄ»°£¬ÄÇô°ÑËüÃÇÒƳýµô¡££¨×¢ÒâMS VC»á°ÑDebugÐÅÏ¢·ÅÔÚ¿ÉÖ´ÐÐÎļþÍⲿ£¬ËùÒÔû¹Øϵ£©Òì³£´¦Àí»á²úÉú¶îÍâµÄ´úÂ룬¾¡¿ÉÄܵÄÈ¥³ýÒì³£´¦Àí´úÂ롣ȷ±£Á¬½ÓÆ÷ÅäÖÃΪȥ³ýÎÞÓõĺ¯ÊýºÍÀà¡£¿ªÆô±àÒëÆ÷µÄ×î¸ßÓÅ»¯¼¶±ð£¬²¢³¢ÊÔÉèÖÃΪ³ß´ç×îС»¯¶ø²»ÊÇËÙ¶È×î´ó»¯ -- ÓÐʱºò£¬ÓÉÓÚCacheÃüÖеÄÌá¸ß£¬»á²úÉú¸üºÃµÄÔËÐÐЧ¹û¡££¨×¢ÒâÔÚʹÓÃÕâÏîÉèÖÃʱ¼ì²éinstrinsic¹¦ÄÜÊÇ·ñÒ²´¦ÓÚ´ò¿ª×´Ì¬£©È¥µôËùÓÐDebugÊä³ö״̬ϵÄÀË·Ñ¿Õ¼äµÄ×Ö·û´®£¬Ê¹±àÒëÆ÷°Ñ¶à¸öÏàͬµÄ×Ö·û´®À¦°ó³ÉÒ»¸öʵÀý¡£
¡¡¡¡ ÄÚÁªÍ¨³£ÊÇÔì³É´óº¯ÊýµÄÊ×·¸¡£±àÒëÆ÷¿ÉÒÔ×ÔÓɵÄÑ¡Ôñ×¢Òâ»òºöÂÔÄãдµÄinline¹Ø¼ü×Ö£¬¶øÇÒËüÃÇ»¹»á±³×ÅÄãÖÆÔìһЩÄÚÁª¡£ÕâÊÇÁíÒ»¸öÒªÄã±£³ÖÇáÁ¿¼¶µÄ¹¹Ô캯ÊýµÄÔ­Òò£¬ÕâÑù¶ÑÕ»ÖеĶÔÏó¾Í²»»áÒòΪÓдóÁ¿µÄÄÚÁª´úÂë¶øÅòÕÍ¡£Í¬Ê±Ò²ÒªÐ¡ÐÄÖØÔØÔËËã·û£¬¼´Ê¹ÊÇ×î¼ò¶ÌµÄ±í´ïʽÈçm1=m2*m3Èç¹ûm2ºÍm3ÊǾØÕóµÄ»°£¬Ò²¿ÉÄܲúÉú´óÁ¿µÄÄÚÁª´úÂë¡£Ò»¶¨ÒªÉîÈëÁ˽âÄãµÄ±àÒëÆ÷¶ÔÓÚÄÚÁªµÄÉèÖá£
¡¡¡¡ ÆôÓÃÔËÐÐʱÀàÐÍÐÅÏ¢£¨RTTI£©ÐèÒª±àÒëÆ÷Ϊÿһ¸öÀà²úÉúһЩ¾²Ì¬ÐÅÏ¢¡£RTTIÒ»°ãÀ´ËµÊÇȱʡÆôÓõģ¬ÕâÑùÎÒÃǵĴúÂë¿ÉÒÔµ÷ÓÃdynamic_castÒÔ¼°¼ì²âÒ»¸ö¶ÔÏóµÄÀàÐÍ£¬¿¼ÂÇÍêÈ«½ûֹʹÓÃRTTIºÍdynamic_castÒÔ½ÚÊ¡¿Õ¼ä£¨½øÒ»²½µÄ˵£¬ÓÐʱºòdynamic_castÔÚijЩʵÏÖÖÐÐèÒª¸¶³öºÜ¸ßµÄ´ú¼Û£©ÁíÒ»·½Ã棬µ±ÄãÕæµÄÐèÒªÓлùÓÚÀàÐ͵IJ»Í¬ÐÐΪµÄʱºò£¬Ôö¼ÓÒ»¸ö²»Í¬ÐÐΪµÄÐ麯Êý¡£ÕâÊǸüºÃµÄÃæÏò¶ÔÏóÉè¼Æ£¨×¢Òâstatic_castÓëÕⲻͬ£¬ËüµÄЧÂʺÍCÓïÑÔµÄÀàÐÍת»»Ò»Ñù£©¡£

5¡¢±ê×¼Àà¿â£¨STL£©
¡¡¡¡ ±ê×¼Àà¿âÊÇÒ»Ì×ʵÏÖÁ˳£¼ûµÄ½á¹¹ºÍËã·¨µÄÄ£°å£¬ÀýÈçdynamic arrays£¨³ÆΪvector£©£¬set£¬mapµÈµÈ¡£Ê¹ÓÃSTL¿ÉÒÔ½ÚÊ¡ÄãºÜ¶àʱ¼äÀ´Ð´ºÍµ÷ÊÔÄÇЩÈÝÆ÷¡£ºÍ֮ǰ̸µ½µÄÒ»Ñù£¬Èç¹ûÏ£ÍûϵͳµÄЧÂÊ×î´ó»¯£¬Äã±ØÐëҪעÒâÄãµÄSTLµÄ¾ßÌåʵÏÖµÄϸ½Ú¡£
¡¡¡¡ ΪÁËÄܹ»¶ÔÓ¦ÓÚ×î´ó·¶Î§µÄÓ¦Óã¬STL±ê×¼ÔÚÄÚ´æ·ÖÅäÕâ¸öÁìÓò±£³ÖÁ˳ÁĬ¡£ÔÚSTLÈÝÆ÷ÖеÄÿһ¸ö²Ù×÷¶¼ÓÐÒ»¶¨µÄЧÂʱ£Ö¤£¬ÀýÈ磬¸øÒ»¸öset½øÐвåÈë²Ù×÷Ö»ÒªO(log n)µÄʱ¼ä£¬µ«ÊÇ£¬¶ÔÒ»¸öÈÝÆ÷µÄÄÚ´æʹÓÃûÓÐÈκα£Ö¤¡£
¡¡¡¡ ÈÃÎÒÃÇÀ´×ÐϸÁ˽âÓÎÏ·¿ª·¢ÖеÄÒ»¸ö·Ç³£ÆÕ±éµÄÎÊÌ⣺ÄãÏ£Íû±£´æÒ»×é¶ÔÏ󣬣¨ÎÒÃÇ»á³ÆÆäΪ¶ÔÏóÁÐ±í£¬ËäÈ»²»Ò»¶¨Òª±£´æÔÚSTLµÄÁбíÖУ©Í¨³£Äã»áÒªÇóÿ¸ö¶ÔÏóÔÚÕâ¸ö±íÓÐÇÒ½öÓÐÒ»¸ö£¬ÕâÑùÄã¾Í²»Óõ£ÐÄÒ»¸öżȻ²úÉúµÄÔÚÈÝÆ÷ÖвåÈëÒ»¸öÒÑ´æÔÚµ¥ÔªµÄ²Ù×÷ÁË¡£STLµÄsetºöÂÔ¸±±¾£¬ËùÓеIJåÈ롢ɾ³ýºÍ²éѯµÄËٶȶ¼ÊÇO(log n)£¬ÕâÊDz»ÊǾÍÊǺܺõÄÑ¡ÔñÄØ£¿
¡¡¡¡ ËäÈ»ÔÚsetÉϵĴó¶àÊý²Ù×÷µÄËٶȶ¼ÊÇO(log n)£¬µ«ÊÇÕâÀïÃæÒÀÈ»´æÔÚ×ÅDZÔÚµÄΣ»ú¡£ËäÈ»ÈÝÆ÷µÄÄÚ´æʹÓÃÒÀÀµÓÚʵÏÖ£¬µ«ºÜ¶àʵÏÖ»¹ÊÇÔÚºìºÚÊ÷µÄ»ù´¡ÉÏʵÏֵġ£ÔÚºìºÚÊ÷ÉÏ£¬Ê÷µÄÿһ¸ö½Úµã¶¼ÊÇÈÝÆ÷µÄÒ»¸öÔªËØ¡£³£¼ûµÄʵÏÖ·½·¨ÊÇÔÚÿһ¸öÔªËر»¼ÓÈëµ½Ê÷ʱ£¬·ÖÅäÒ»¸ö½Úµã£¬¶øµ±Ã¿¸öÔªËر»ÒƳöÊ÷ʱ£¬ÊÍ·ÅÒ»¸ö½Úµã¡£¸ù¾ÝÄã²åÈëºÍɾ³ýµÄƵ·±³Ì¶È£¬ÔÚÄÚ´æ¹ÜÀíÆ÷ÉÏËù»¨·ÑµÄʱ¼ä½«»ò¶à»òÉÙµÄÓ°ÏìÄãͨ¹ýʹÓÃset¶ø»ñµÃµÄºÃ´¦¡£
¡¡¡¡ ÁíÍâÒ»¸ö½â¾ö·½°¸ÊÇʹÓÃvectorÀ´´æ´¢ÔªËØ£¬vector±£Ö¤ÔÚÈÝÆ÷µÄÄ©¶ËÌí¼ÓÔªËØÓкܸߵÄЧÂÊ¡£Õâ±íʾʵ¼ÊÉÏvectorÖ»ÔÚºÜżȻµÄÇé¿öϲÅÖØзÖÅäÄڴ棬Ҳ¾ÍÊÇ˵£¬µ±ÂúµÄʱºòÀ©ÈÝÒ»±¶¡£µ±Ê¹ÓÃvectorÀ´±£´æÒ»¸ö²»Í¬ÔªËØÁбíµÄʱºò£¬ÄãÊ×ÏÈÒª¼ì²éÔªËØÊÇ·ñÒѾ­´æÔÚ£¬Èç¹ûûÓУ¬ÄÇô¼ÓÈë¡£¶ø¶ÔÕû¸övector¼ì²éÒ»±éÐèÒª»¨·ÑO(n)µÄʱ¼ä£¬µ«Êǵ«Êµ¼ÊÇ£Éæµ½µÄ²¿·ÖÓ¦¸Ã±È½ÏÉÙ£¬ÕâÊÇÒòΪvectorµÄÿ¸öÔªËض¼ÔÚÄÚ´æÖÐÁ¬Ðø´æ·Å£¬ËùÒÔ¼ì²éÕû¸övectorʵ¼ÊÉÏÊÇÒ»¸öÒ×ÓÚcacheµÄ²Ù×÷¡£¼ì²éÕû¸öset½«Ôì³Écache²»ÃüÖУ¬ÕâÊÇÒòΪÔÚºìºÚÊ÷ÉÏ·Ö±ð´æ·ÅµÄÔªËØ¿ÉÄÜÉ¢²¼ÔÚÄÚ´æµÄ¸÷¸ö½ÇÂ䡣ͬʱ£¬ÎÒÃÇÒ²×¢Òâµ½set±ØÐë¶îÍâά»¤Ò»×é±ê¼ÇÒÔÉèÖÃÕû¸öÊ÷¡£Èç¹ûÄãÒª±£´æµÄÊǶÔÏóµÄÖ¸Õ룬set¿ÉÄÜÒª»¨·ÑvectorËùÒª»¨·ÑµÄÄÚ´æµÄ3µ½4±¶¡£
¡¡¡¡ SetµÄɾ³ý²Ù×÷ÏûºÄʱ¼äO(log n)£¬¿´ÆðÀ´ÊǺܿ죬Èç¹ûÄã²»¿¼ÂÇ¿ÉÄܶÔfree()µÄµ÷ÓõĻ°¡£VectorµÄɾ³ý²Ù×÷ÏûºÄO(n)£¬ÕâÊÇÒòΪ´Ó±»É¾³ýµÄÄǸöÔªËØ¿ªÊ¼µ½½áβ´¦µÄÔªËØ£¬Ã¿Ò»¸öÔªËض¼Òª±»¿½±´µ½Ç°Ò»¸öλÖÃÉÏ¡£Èç¹ûÔªËض¼Ö»ÊÇÖ¸ÕëµÄ»°£¬ÄÇôÕâ¸ö¿½±´½«¿ÉÒÔÒÀ¿¿Ò»¸ö¼òµ¥µÄmemcpy()À´Íê³É£¬¶øÕâ¸öº¯ÊýÊÇÏ൱¿ìµÄ¡££¨ÕâÒ²ÊÇΪʲôͨ³£¶¼°Ñ¶ÔÏóµÄÖ¸Õë´¢´æÔÚSTLµÄÈÝÆ÷ÖеÄÒ»¸öÔ­Òò£¬¶ø²»ÊÇ´¢´æ¶ÔÏó±¾Éí¡£Èç¹ûÄãÖ±½Ó±£´æÁ˶ÔÏó±¾Éí£¬½«»áÔںܶà²Ù×÷ÖÐÔì³ÉÐí¶à¶îÍâµÄ¹¹Ô캯ÊýµÄµ÷Óã¬ÀýÈçɾ³ýµÈ£©¡£
¡¡¡¡ setºÍmapͨ³£À´ËµÂé·³´óÓÚÓÐÓã¬Èç¹ûÄ㻹ûÓÐÒâʶµ½ÕâÒ»µãµÄ»°£¬¿¼ÂDZéÀúÒ»¸öÈÝÆ÷µÄ´ú¼Û£¬ÀýÈ磺

¡¡¡¡ for(Collection::iterator it = Collection.begin(); it != Collection.end(); ++it)

¡¡¡¡ Èç¹ûCollectionÊÇvector£¬ÄÇô++it¾ÍÊÇÒ»¸öÖ¸Õë×ÔÔö¡£µ«Êǵ±CollectionÊÇÒ»¸öset»òÕßÊÇÒ»¸ömapµÄ»°£¬++it°üÀ¨ÁË·ÃÎʺìºÚÊ÷ÉϵÄÏÂÒ»¸ö½Úµã¡£Õâ¸ö²Ù×÷Ï൱¸´ÔÓ¶øÇÒºÜÈÝÒ×Ôì³Écache²»ÃüÖУ¬ÒòΪÊ÷µÄ½Úµã¼¸ºõ±é²¼ÄÚ´æµÄ¸÷´¦¡£
¡¡¡¡ µ±È»£¬Èç¹ûÄãÒªÔÚÈÝÆ÷Öб£´æ´óÁ¿µÄÔªËØ£¬²¢ÇÒ½øÐÐÐí¶àµÄ³ÉÔ±ÇëÇó£¬ÄÇôsetµÄO(log n)µÄЧÂÊÍêÈ«¿ÉÒÔµÖÏûÄÇЩÄÚ´æ·½ÃæµÄÏûºÄ¡£½üËƵģ¬Èç¹ûÄãż¶û²ÅʹÓÃÈÝÆ÷£¬ÄÇôÕâÀïµÄЧÂʲî±ð¾Í·Ç³£µÄС¡£ÄãÓ¦¸Ã×öһЩЧÂÊÆÀ¹ÀÒÔÁ˽â¶à´óµÄn»áʹset±äµÃ¸ü¿ì¡£Ò²ÐíÄã»á¾ªÆæµÄ·¢ÏÖÔÚÓÎÏ·µÄ´ó¶àÊýµäÐÍÓ¦ÓÃÏÂvectorµÄËùÓÐЧÂʶ¼±ÈsetÒª¸ß¡£
¡¡¡¡ Õ⻹²»ÊÇSTLÄÚ´æʹÓõÄÈ«²¿¡£Ò»¶¨ÒªÁ˽⵱ÄãʹÓÃclear·½·¨Ê±£¬ÈÝÆ÷ÊÇ·ñÕæµÄÊͷŵôÁËËüµÄÄÚ´æ¡£Èç¹ûûÓУ¬¾Í¿ÉÄܲúÉúÄÚ´æËéƬ¡£±ÈÈ磬Èç¹ûÄ㿪ʼÓÎÏ·µÄʱºò½¨Á¢ÁËÒ»¸ö¿ÕµÄvector£¬ÔÚÓÎÏ·¹ý³ÌÖÐÔö¼ÓÔªËØ£¬È»ºóÔÚÓÎÏ·restartʱµ÷ÓÃclear£¬Õâʱvectorδ±ØÊÍ·ÅËüµÄÈ«²¿ÄÚ´æ¡£Õâ¸ö¿ÕµÄvector£¬¿ÉÄÜÒÀȻռ¾ÝÁ˶ÑÖеÄÄڴ棬²¢Ê¹Æä±ä³ÉËéƬ¡£Èç¹ûÄãÕæµÄÐèÒªÕâÑùÀ´ÊµÏÖÓÎÏ·µÄ»°£¬¶ÔÕâ¸öÎÊÌâÓÐÁ½Öֽⷨ¡£Ò»ÊÇÄã¿ÉÒÔÔÚ´´½¨vectorʱµ÷ÓÃreserve()£¬ÎªÄã¿ÉÄÜÐèÒªµÄ×î´óÊýÁ¿µÄÔªËر£Áô×ã¹»µÄ¿Õ¼ä¡£Èç¹ûÕâ²»¿ÉÐеĻ°£¬Äã¿ÉÒÔÇ¿ÆÈvectorÍêÈ«ÊÍ·ÅÄڴ棺

¡¡¡¡ Vector V;
¡¡¡¡ // ¡­ elements are inserted into V here
¡¡¡¡ Vector().swap(v);¡¡¡¡// causes v to free its memory

¡¡¡¡ Set¡¢listÒÔ¼°map¶¼Ã»ÓÐÕâ¸öÎÊÌ⣬ÕâÊÇÒòΪËûÃÇΪÿ¸öÔªËØ·Ö±ð·ÖÅäºÍÊÍ·ÅÄÚ´æ¡£

6¡¢¸ß¼¶ÌØÐÔ
¡¡¡¡ ±à³ÌÓïÑÔµÄijЩÌØÐÔÄã¿ÉÄÜû±ØÒªÓõ½¡£¿´ÉÏÈ¥¼òµ¥µÄÌØÐÔ¿ÉÄܻᵼÖµÍϵÄЧÂÊ¡£¶ø¿´ÆðÀ´¸´ÔÓµÄÌØÐÔû׼ִÐеúܺá£C++µÄÕâЩºÚ°µ½ÇÂäÒì³£ÒÀÀµÓÚ±àÒëÆ÷¡£µ±ÄãҪʹÓÃËüÃÇʱ£¬±ØÐëÁ˽âËüÃǵĴú¼Û¡£
¡¡¡¡ C++µÄstring¾ÍÊÇÒ»¸ö¿´ÆðÀ´²»´íµÄÀý×Ó£¬µ«ÊÇÔÚЧÂʼ«ÆäÖØÒªµÄ³¡ºÏÓ¦¸Ã±ÜÃâʹÓ㬿¼ÂÇÏÂÃæµÄ´úÂë¡£

¡¡¡¡ Void Function(const std::string &str)
¡¡¡¡ {
¡¡¡¡ }
¡¡¡¡ Function("hello");

¡¡¡¡ ¶ÔFunction()µÄµ÷ÓðüÀ¨Á˶Ըø¶¨const char*²ÎÊýµÄ¹¹Ô캯ÊýµÄµ÷Óá£ÔÚÆÕ±éµÄʵÏÖÖУ¬Õâ¸ö¹¹Ô캯ÊýÖ´ÐÐÁËÒ»¸ömalloc()£¬Ò»¸östrlen()£¬ÒÔ¼°Ò»¸ömemcpy()£¬¶øÎö¹¹º¯ÊýÁ¢¿ÌÉÏÀ´×öÁËһЩÎÞÒâÒåµÄÊÂÇé¡££¨ÓÉÓÚ¸ÃÀý×ÓÖеÄstringûÓб»¸ü¶àµÄÓ¦Óã©È»ºóÓÖ¸úÁËÒ»¸öfree()¡£ÕâÀïµÄÄÚ´æ·ÖÅäÍêÈ«ÊÇÀË·Ñ£¬ÒòΪ×Ö·û´®¡°hello¡±Ôç¾ÍÔÚ³ÌÐòµÄÊý¾Ý¶ÎÖÐÁË¡£ÎÒÃÇÔç¾ÍÓÐËüÔÚÄÚ´æÖеĸ±±¾ÁË¡£Èç¹ûFunction¶¨ÒåÁËÒ»¸öconst char*µÄ²ÎÊý£¬ÄÇôÍêȫûÓÐÁËÉÏÃæËù˵µÄÄÇЩ¶îÍâµÄµ÷Óá£Õâ¾ÍÊÇΪÁËʹÓ÷½±ãµÄstring¶ø¸¶³öµÄ¸ß°º´ú¼Û¡£
¡¡¡¡ Ä£°åÊÇЧÂʵĶÔÁ¢ÃæµÄÒ»¸öÀý×Ó£¬¸ù¾ÝÓïÑÔ±ê×¼£¬±àÒëÆ÷ÔÚÄ£°åʵÀý»¯ÎªÒ»¸ö¾ßÌåµÄÀàÐÍʱ²úÉú´úÂë¡£ÀíÂÛÉÏ£¬¿´ÉÏÈ¥ÊÇÉùÃ÷ÁËÒ»¸öÄ£°å£¬µ«È´Êµ¼Ê²úÉúÁË´óÁ¿µÄÏàËƵĴúÂë¡£Èç¹ûÄãÓÐÁËclass1µÄÖ¸ÕëµÄvector£¬Ò²ÓÐclass2µÄÖ¸ÕëµÄvector£¬Äã¾ÍÔÚÄãµÄ¿ÉÖ´ÐÐÎļþÖÐ×öÁËÁ½·ÝµÄvectorµÄ¿½±´¡£
¡¡¡¡ ÊÂʵÉÏ£¬´ó¶àÊýµÄ±àÒëÆ÷×öµÃ¸üºÃ£¬Ê×ÏÈ£¬Ö»ÓÐʵ¼Ê±»Ê¹Óõ½µÄÄ£°å³ÉÔ±º¯Êý±»²úÉú´úÂë¡£Æä´Î£¬Èç¹ûÊÂÏÈÁ˽âÁËÕýÈ·µÄÐÐΪ£¬±àÒëÆ÷¿ÉÒÔÖ»²úÉúÒ»·Ý´úÂëµÄ¿½±´¡£Äã¿ÉÒÔ´ÓvectorµÄÀý×Ó·¢ÏÖÕâÒ»µã£¬È·ÊµÖ»²úÉúÁËÒ»·Ý´úÂ루һ°ãÊÇvector £©¡£ÓÐÁ˺õıàÒëÆ÷£¬Ä£°å»¹ÊÇ¿ÉÒÔÔÚ±£³Ö¸ßЧµÄͬʱÌṩÄãÒ»°ã±à³ÌµÄºÃ´¦¡£
¡¡¡¡ C++µÄһЩÌØÐÔ£¬±ÈÈç³õʼ»¯ÁбíÒÔ¼°Ç°×ÔÔö£¬Ò»°ãÀ´Ëµ¿ÉÒÔÌá¸ßЧÂÊ¡£¶øÏóÆäËüµÄһЩÌØÐÔ±ÈÈçÔËËã·ûÖØÔØÒÔ¼°RTTIÔò¿´ÆðÀ´ËƺõÊÇÇå°×µÄ£¬µ«È´ÓÐʱ´øÀ´ÑÏÖصÄЧÂÊÎÊÌâ¡£STLµÄÈÝÆ÷ÔòÃèÊöÁËäĿÏàÐź¯ÊýµÄËã·¨ÔËÐÐʱ¼ä¿ÉÒÔÈçºÎÈÃÄãÎóÈëÆç;¡£±ÜÃâʹÓÃDZÔڵĵÍЧÂʵÄÓïÑÔ»òÀà¿âÌØÐÔ£¬Í¬Ê±»¨Ð©Ê±¼äÀ´Á˽âÄãµÄ±àÒëÆ÷µÄ¸÷ÖÖÑ¡Ïî¡£Äã»áºÜ¿ìµÄѧ»áÉè¼Æ¸ßЧµÄ´úÂ룬²¢ÇÒ½â¾öµôÄãµÄÓÎÏ·ÖеÄЧÂÊÎÊÌâ¡£

7¡¢ÆäËû²Î¿¼
¡¡¡¡ Thanks to Pete Isensee and Christopher Kirmse revIEwing this gem.
¡¡¡¡ Cormen, Thomas, Charles Leiserson, and Ronald Rivest, Introduction to Algorithms, Cambridge, Massachusetts, MIT Press, 1990
¡¡¡¡ Isensee, Peter, C++ Optimization Strategies and Techniques, www.tantalon.com/pete/cppopt/main.htm Koenig, Andrew "Pre-or Postfix Increment"
¡¡¡¡ The C++ Report, June,1999 Meyers, Scott, Effective C++, Second Edition, Reading, Massachusetts: Addison-Wesley Publishing Co., 1998.
¡¡¡¡ Sutter, Herb, Guru of the Week #54: Using Vector and Deque, www.gotw.ca/gotw/054.htm
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 1 ÌõÆÀÂÛ

  1. benny_feng ÓÚ 2006-08-01 16:59:47·¢±í:

    ţ