एक नई सरणी - सी ++, सरणी के लिए सरणी का सेट

मेरे पास 2 डी सरणी का एक सेट है कहता हैए 1 [डब्ल्यू] [एच], ए 2 [डब्ल्यू] [एच], ए 3 [डब्ल्यू] [एच], ए 4 [डब्ल्यू] [एच], ए 5 [डब्ल्यू] [एच] एक समारोह से। अब मैं इन्हें किसी अन्य फ़ंक्शन में पास करना चाहता हूं इसलिए इस उद्देश्य के लिए मैं एक 3 डी सरणी बनाने का निर्णय लेता हूं जो इन्हें ए [डब्ल्यू] [एच] [5] कह सकता है। अब मुझे जिस समस्या का सामना करना पड़ रहा है वह सभी पांच अलग-अलग मैट्रिक्स के साथ सरणी ए भर रहा है। इसे एक के साथ भरने के लिए मैं loops के लिए उपयोग कर सकते हैं

for(i=0;i<5;i++)
{
for(j=0;j<w;j++)
{
for(k=0;k<h;k++)
{
A[j][k][i]=a1[j][k];
}
}
}

यह केवल ए 1 के साथ सरणी ए भरता है, ऐसा करने के लिए लूपों को ऐसा करने का कोई तरीका है कि ए को सभी 5 मैट्रिक्स से भरा जा सकता है।

उत्तर:

उत्तर के लिए -2 № 1

यदि आप 5 सरणी का सेट प्राप्त करना चाहते हैं, तो क्यों न करें:

A[0] = a1;
A[1] = a2;
...
A[4] = a5;

यह आपके सरणी के साथ ए भर जाएगा और लूप के लिए 3 से बहुत कम लालची होगी।

फिर आपको "ए को अपने फ़ंक्शन तर्क के रूप में पास करना होगा।


जवाब के लिए 0 № 2

AFAIK, ऐसा करने का कोई आसान तरीका नहीं है।आवश्यक कारण यह है कि a1..a5 सरणी कुछ संबंधित स्मृति में है, हो सकता है कि आप ऑपरेटर को ओवरलैप न करें। जबकि नई 3 डी सरणी एक और बड़ी मेमोरी पर होनी चाहिए। शायद आप उस चाल को कर सकते हैं जो प्रत्येक 2 डी सरणी से मेमोरी प्रतिलिपि रखने के लिए पर्याप्त मेमोरी लेजर को मॉलोक करता है। लेकिन इसका नतीजा यह है कि लॉगर कहते हैं कि इससे पहले कि आपकी सरणी इंडेक्स आखिरी नहीं है। तो आप अपनी पोस्ट में क्या करते हैं वह सी ++ भाषा में ऐसा करने का सबसे आसान तरीका है।


जवाब के लिए 0 № 3

आप पॉइंटर सरणी का उपयोग करने का प्रयास कर सकते हैं, कहें, (*a)[5] = {a1, a2, a3, a4, a5}, और फिर उपयोग करें

A[j][k][i] = a[i][j*h+k]

संबंधित सवाल
सबसे लोकप्रिय