पसंद नहीं मैं कुछ महीनों के लिए मेरे सिर दौर C++ मिल रहा है, और गूगल द्वारा निर्देश दिया गया अतिप्रवाह समय के सबसे C++ प्रश्नों के लिए ढेर करने के लिए है। मैंने "आप वेक्टर का उपयोग क्यों नहीं करते हैं" के अक्सर अनुशंसाओं को नोट करते हैं, और ऐसा करने के लिए प्रेरित थे।C++ वैक्टर सरणियों
तो, मुख्य रूप से स्वत: स्मृति आवंटन रद्द करने, के मामूली लाभ पाने और छँटाई के लिए टाइप किया तुलना कार्यों लिखने के लिए सक्षम होने के लिए। मैंने वेक्टर होने के लिए ऑब्जेक्ट्स के पॉइंटर्स की एक सरणी स्विच की। अब मैंने सोचा था कि (गलत तरीके से ऐसा लगता है) कि वैक्टर इस्तेमाल किया जा सकता और अधिक या कम सरणियों की तरह है, और इसलिए मैं thusly प्रारंभ:
cluster clusters[LOTS];
vector<cluster *> pclust;
pclust.reserve(numClust);
for (int i=0; i<numClust; ++i)
pclust[i] = clusters + i;
संकलक से कोई शिकायत नहीं। फिर कुछ समय बाद मुझे क्लस्टर ऑब्जेक्ट की कुछ विशेषता पर वेक्टर को सॉर्ट करने की आवश्यकता है। तो:
std::sort(pclust.begin(), pclust.end(), ClusterCompareNumSegs);
फिर से संकलन करने में कोई समस्या नहीं है। वेक्टर को छोड़कर सॉर्ट नहीं किया गया है। ऐसा लगता है कि vector.size() शून्य, और निश्चित रूप से मेरी प्रारंभ
pclust.push_back(clusters + i);
अब जब कि ठीक करने के लिए आसान है किया जाना चाहिए था, लेकिन मैं उलझन में हूँ, क्योंकि प्रारंभिक गलत काम काम कर रहा था।
for (clustind=0; clustind < numClust; ++clustind) {<br>
cluster *cl = pclust[clustind];
...happily access *cl...
और यह सब ठीक काम किया: तो जैसी सरणी सिंटैक्स का उपयोग, - मैं सफलतापूर्वक वेक्टर के माध्यम से दोहराया। तो मैं बस सोच रहा हूं कि क्या हो रहा है। संभवतः मेरे प्रारंभिक असाइनमेंट में, मैं वेक्टर में अभी तक तत्वों तक पहुंचने की कोशिश नहीं कर रहा था (मैं उन्हें अंदर रखने की कोशिश कर रहा था), और वेक्टर उन अपवादों को फेंक रहा था जिन्हें मैं अनदेखा कर रहा था। लेकिन फिर भी, स्थानों का संदर्भ देते समय, पॉइंटर्स वहां थे। क्या कोई ज्ञान प्रदान कर सकता है?
मानक पुस्तकालय बहुत विशाल है, और विशेष रूप से शुरुआत का स्वागत करते हुए नहीं है, मैं सुझाव है कि आप कम से कम कंटेनर प्रकार (http://en.cppreference.com/w/cpp) का दस्तावेज़ पढ़ें - यह आपको बहुत दर्द बचाएगा। – cmannett85
बस दोहराने के लिए, मेरा कोड अब ठीक हो गया है, लेकिन मैं बस – bandjalong
पर सोच रहा था .. अगर कोई भी ऑपरेटर [] के साथ-साथ काम करता है, तो आकार के बिना भी समझा सकता है। शायद वेक्टरों के कंपाइलर (जीसीसी) कार्यान्वयन के साथ बस भाग्यशाली? – bandjalong