मैं सी में डबल्स के 2-डी सरणी (एक घने मैट्रिक्स) ++, निरपेक्ष न्यूनतम भूमि के ऊपर तक पहुँचने के साथ प्रतिनिधित्व करने के लिए एक तरह से की जरूरत है।अनुकूलन सी ++ 2-डी सरणियों
मैं विभिन्न लिनक्स/यूनिक्स मशीनों और जीसीसी संस्करणों पर कुछ समय से किया है। वैक्टर का एक एसटीएल वेक्टर, के रूप में घोषित:
vector<vector<double> > matrix(n,vector<double>(n));
और matrix[i][j]
के माध्यम से पहुँचा घोषित रूप में एक सरणी से उपयोग करने के लिए 5% और 100% धीमी बीच है:
double *matrix = new double[n*n];
एक inlined सूचकांक समारोह matrix[index(i,j)]
के माध्यम से पहुँचा , जहां index(i,j)
i + n * j का मूल्यांकन करता है। एसटीएल के बिना 2-डी सरणी की व्यवस्था करने के अन्य तरीकों - प्रत्येक पंक्ति की शुरुआत में एन पॉइंटर्स की एक सरणी, या स्थिर आकार matrix[n][n]
के रूप में स्टैक पर पूरी चीज़ को परिभाषित करना - लगभग उसी गति से चलाना जैसे इंडेक्स फ़ंक्शन विधि ।
हाल के जीसीसी संस्करण (> 4.0) एसटीएल वेक्टर-ऑफ-वैक्टरों को ऑप्टिमाइज़ेशन चालू होने पर गैर-एसटीएल कोड के समान दक्षता में संकलित करने में सक्षम प्रतीत होते हैं, लेकिन यह कुछ हद तक मशीन-निर्भर है।
मैं यदि संभव हो तो एसटीएल उपयोग करना चाहते हैं, लेकिन सबसे तेजी से समाधान का चयन करना होगा। क्या किसी को जीसीसी के साथ एसटीएल अनुकूलित करने में कोई अनुभव है?
क्या यह वास्तव में std :: vector के साथ काम करता है? मुझे शक है। – lothar
वास्तव में अद्भुत और डरावना दोनों होगा। – peterchen