2009-02-18 16 views
5

मैं सी ++ सीख रहा हूं और पुस्तक जो मैं पढ़ रहा हूं (सी ++ प्रोग्रामिंग भाषा) मानक पुस्तकालयों पर भरोसा करने के लिए पहिया को फिर से नहीं दिखाना है। सी में, मैं अक्सर एक लिंक्ड सूची बनाने के लिए समाप्त होता हूं, और लिंक सूची पुनरावृत्ति बार-बार (शायद मैं यह गलत नहीं कर रहा हूं), इसलिए सी ++, और स्ट्रिंग्स और एल्गोरिदम में उपलब्ध कंटेनर के विचार वास्तव में मुझे अपील करते हैं । हालांकि मैंने थोड़ा ऑनलाइन पढ़ा है, और एसटीएल के बारे में अपने दोस्तों और सहकर्मियों से कुछ आलोचनाएं सुनी हैं, इसलिए मैंने सोचा कि शायद मैं यहां कुछ दिमाग उठाऊंगा।कुछ सी ++ मानक पुस्तकालय उपयोग सर्वोत्तम प्रथाओं क्या हैं?

एसटीएल का उपयोग करने के लिए कुछ सर्वोत्तम अभ्यास क्या हैं, और आपने एसटीएल के बारे में क्या सबक सीखा है?

+0

मुझे एसटीएल के बारे में शिकायतों में दिलचस्पी होगी ताकि हम उन्हें शूट कर सकें। –

+0

मार्टिन, मेरी शिकायत उपयोग की आसानी है। जब मुझे दो इटरेटर पास करने की ज़रूरत होती है, तो यह सबसे असुविधाजनक होती है, और सबसे बड़ी असुविधा होती है, उदा। गिनती (obj.getVecByVal()। शुरू करें(), obj.getVecByVal()। end(), 5) nonobviously विफल रहता है (अलग प्रतियों पर पुनरावृत्ति के कारण) - इसलिए एक नामित स्थानीय की आवश्यकता है –

+0

मार्टिन - जब वे फिर से आते हैं मैं एक नया सवाल पोस्ट करूंगा। ज्यादातर यह खुदाई और धीमापन के बारे में किया गया है। –

उत्तर

14

प्रभावी सी ++ श्रृंखला के लिए एक साथी पुस्तक है, जिसे "Effective STL" कहा जाता है। मानक सी ++ लाइब्रेरी (नी एसटीएल) का उपयोग करके सर्वोत्तम प्रथाओं के बारे में सीखने के लिए यह एक अच्छा प्रारंभिक बिंदु है।

10

आप ": 50 विशिष्ट तरीके आपका कार्यक्रम और डिजाइन (2 संस्करण) में सुधार करने के लिए प्रभावी सी ++": की एक प्रति लेने के लिए चाहते हो सकता है

http://www.amazon.com/Effective-Specific-Addison-Wesley-Professional-Computing/dp/0201924889

मैं इसे अमूल्य होने के लिए मिल गया है, और यह आज भी बहुत प्रासंगिक है, भले ही आप सी ++ में प्रोग्रामिंग नहीं कर रहे हों।

+0

शायद एक ही लेखक द्वारा "प्रभावी एसटीएल" बिंदु पर अधिक होगा? –

+0

अपनी सभी सी ++ किताबें पढ़ना निश्चित रूप से एक सर्वोत्तम अभ्यास है। – twk

+0

बहुत बढ़िया। मैं इन किताबों को देखूंगा। :) –

6

यदि आप वास्तव में सी ++ मानक पुस्तकालय सीखना चाहते हैं (जिसमें तारों जैसी चीजें शामिल हैं, जिन्हें पारंपरिक रूप से एसटीएल के हिस्से के रूप में नहीं देखा गया है), तो आपको एक अच्छी किताब की आवश्यकता है। इस क्षेत्र में सबसे अच्छा "The C++ Standard Library" by Nicolai Jossutis है।

1

आप टेम्पलेट, और अन्य बहुरूपता की अवधारणा को समझना चाहिए, ताकि कुशलतापूर्वक एसटीएल का उपयोग करने के। एसटीएल के बारे में जानने के लिए

1

आपको टेम्पलेट्स को समझने की आवश्यकता है और आपको डेटा संरचनाओं में भी अच्छा होना चाहिए।

3

आप हमें उन आलोचनाओं को क्यों नहीं बताते हैं, और हम जवाब देंगे? यदि आलोचना वैध हैं, तो हम आपको बताएंगे। और यदि वे नहीं हैं, तो हम आपको बताएंगे क्यों नहीं।

एसटीएल का मिश्रित इतिहास है, क्योंकि शुरुआत में, 1) कुछ लोग इसे समझते थे, और 2) कुछ कंपाइलर्स ने इसे सही ढंग से कार्यान्वित किया। लेकिन वह एक दशक पहले था। आज? यह काम करता हैं। यह कुशल है। यह बहुत सारी समस्याओं को हल करता है। इसके साथ सबसे बड़ी समस्या यह है कि यह आपके सिर को लपेटने में कुछ समय लगता है कि यह कैसे काम करता है।

सबसे सरलतम अभ्यास यह है कि "जब भी यह आपको आवश्यक कार्यक्षमता प्रदान करता है तो एसटीएल का उपयोग करें"। और जब तक हम जानते हैं कि इसके खिलाफ क्या आलोचनाएं हैं, तब तक हमें अधिक विशिष्ट सलाह प्रदान करना मुश्किल है।

लेकिन आम तौर पर, यह आम तौर पर यह मामला है कि जो लोग इसकी आलोचना करते हैं वे सी ++ प्रोग्रामर नहीं हैं। सी प्रोग्रामर जिन्होंने कक्षाओं का उपयोग करना सीखा है इस श्रेणी में आते हैं।

5

एससी ++ एल उपयोग करने के लिए उपयुक्त नहीं होने पर एकमात्र मामले मैं अपने सिर के ऊपर से सोच सकता हूं, कुछ दुर्लभ स्थितियां हैं जिनमें उचित कार्यान्वयन प्रदान नहीं किया जाता है (शायद आप कुछ अस्पष्ट पर काम कर रहे हैं मंच जिसके लिए केवल सीमित सी ++ कंपाइलर्स लागू किए गए हैं) या चरम प्रदर्शन की आवश्यकता है (शायद कोड के लिए जो अगली पीढ़ी के गेम के लिए ग्राफिक्स प्रतिपादन प्रणाली के मूल में मौजूद है)।

यदि आप एक साधारण कंप्यूटर का उपयोग कर रहे हैं, तो यह 99% निश्चित है कि आप पहले मामले में नहीं हैं।दूसरे मामले के लिए, आपको केवल प्रदर्शन कारणों के लिए कंटेनर और एल्गोरिदम के अपने सेट को लागू करने पर विचार करना चाहिए यदि आपके पास अच्छे प्रोफाइलिंग टूल से निश्चित सबूत हैं जो आपके प्रोग्राम में बाधा एससी ++ एल है।

एससी ++ एल के बारे में सबसे अच्छा अभ्यास जब भी संभव हो इसका उपयोग करना है। इसके अलावा, लगभग सभी आधुनिक सी ++ कोड Boost का भारी उपयोग करते हैं, जिसे आप एससी ++ एल के लिए उत्कृष्ट और बड़े पैमाने पर विस्तार के रूप में सोच सकते हैं। जब भी आप खुद को एक मानक मानक एल्गोरिदमिक कार्य करना चाहते हैं, तो आपको यह देखने के लिए Google का उपयोग करना चाहिए कि एससी ++ एल या बूस्ट इस कार्य को पूरा करने के लिए प्रीमियर, परीक्षण, सिद्ध सुविधाएं प्रदान करता है या नहीं।

2

एसटीएल सर्वश्रेष्ठ दिमागों द्वारा लिखा गया था। आप शायद ज्यादातर मामलों में बेहतर कार्यान्वयन के साथ नहीं आएंगे। इसका प्रदर्शन अच्छा है, यह बग फ्री है, और यह विधियों, एपीआई, कोड घटकों, और कहने की जरूरत नहीं है, यह सभी बदसूरत सामान encapsulates के बीच पैरामीटर गुजरने के लिए एक अच्छा मानक है। बात यह है कि आपको अपनी समस्या के लिए सही कंटेनर चुनना है। अन्यथा, आप इसके लाभ का आनंद नहीं ले सकते हैं। सही एसटीएल कंटेनर को चुनने के तरीके के बारे में वेब पर कुछ लेख हैं। एक अच्छा लिंक है: STL Containers , और इसमें आपके कंटेनर को चुनने का एक अच्छा प्रवाह चार्ट है।

संबंधित मुद्दे