यह देर से उत्तर दिया गया है, लेकिन यह अभी भी एक दिलचस्प सवाल है!
डोम का जवाब काफी सटीक है, और उपयोगकर्ता 1460044 में ढेर/ढेर संदर्भ भी दिलचस्प है।
देखने के एक व्यावहारिक बिंदु से, मैं का उपयोग नहीं होताMatx
(या Vec
), अगर सिवाय यह पूरी तरह से आवश्यक थे। MATX का प्रमुख लाभ
- ढेर का उपयोग करना (कुशल! [1])
- प्रारंभ कर रहे हैं।
समस्या है, अंत में आप एक Mat
करने के लिए अपने Matx
डेटा स्थानांतरित करने के लिए सामान का सबसे करना होगा, और हां, तो आप ढेर पर फिर से वापस हो जाएगा। दूसरी ओर, एक Matx
का 'कूल प्रारंभ "एक सामान्य चटाई में किया जा सकता:
// Matx initialization:
Matx31f A(1.f,2.f,3.f);
// Mat initialization:
Mat B = (Mat_<float>(3,1) << 1.f, 2.f, 3.f);
इसके अलावा, वहाँ प्रारंभ में एक फर्क सामान (ढेर/ढेर से परे) है। यदि आप Matx31 में 5 मान डालने का प्रयास करते हैं, तो यह Mat_::operator<<
को 5 मानों के साथ कॉल करते समय केवल तीन तीन स्टोर करेगा, यह क्रैश (रनटाइम अपवाद) होगा।
[1] कुशल यदि आपके प्रोग्राम को ~ 10 से कम तत्वों के बहुत सारे मैट्रिक्स बनाना है। उस मामले में Matx
matrices का उपयोग करें।
स्रोत
2014-07-16 13:24:34
प्रलेखन में बहुत बारीकी से देख के बिना, एक कह सकते हैं कि संकलन समय पर आकार जानने निश्चित रूप से कई फायदे हैं, तो डायनामिक आबंटित स्मृति के सभी प्रतिस्थापन के पहले है संकलन समय सरणियों, द्वारा जो इस तरह के छोटे स्पष्ट रूप से परिभाषित मैट्रिक्स के लिए एक स्पष्ट अनुकूलन है। कहा जा रहा है कि, आपका प्रश्न यह स्पष्ट रूप से उत्तर देता है: * "ज्ञात आकार के छोटे matrices के लिए इरादा" *। छवि परिवर्तन या कैमरा अंशांकन में उपयोग के रूप में परिवर्तन matrices के बारे में सोचो। –
लेकिन अभी भी मैट (3,1, सीवी_32 एफसी 1) –
डालने से पुराने प्रकार के मैट के साथ किया जा सकता है, इसलिए, गतिशील स्मृति आवंटन पर संकलन समय सरणी का उपयोग करने के स्पष्ट अनुकूलन के बारे में मेरा पूरा पहला पैराग्राफ। बेशक यह सिर्फ एक अनुकूलन है और कोई अतिरिक्त कार्यक्षमता नहीं है, लेकिन वास्तव में यह लाभ आपको मिलता है। आप वास्तव में सख्त 3x4 मैट्रिक्स के लिए गतिशील रूप से स्मृति आवंटित नहीं करना चाहते हैं। –