2012-10-09 11 views
14

में दो पूर्णांक सरणियों जोड़ ++ वहाँ ++सी एक बड़ा सरणी

int * arr1; 
int * arr2; 
//pretend that in the lines below, we fill these two arrays with different 
//int values 

सी में दो पूर्णांक सरणियों लेने के लिए और फिर उन्हें एक में गठबंधन करने के लिए बड़ा सरणी है कि दोनों सरणियों 'मान हैं एक तरीका है?

उत्तर

27
int * result = new int[size1 + size2]; 
copy(arr1, arr1 + size1, result); 
copy(arr2, arr2 + size2, result + size1); 

बस सुझाव, vector करना होगा बेहतर पॉइंटर

+0

'परिणाम' एक 'std :: vector' प्रकार है? – LAL

8

यदि आप सरणी का उपयोग कर रहे हैं, तो आपको सभी मानों को संग्रहीत करने के लिए पर्याप्त रूप से एक नई सरणी आवंटित करने की आवश्यकता है, फिर मानों को सरणी में कॉपी करें। इस सरणी आकार जानने की आवश्यकता होगी, आदि

आप सरणियों के बजाय std::vector (जो अन्य फायदे हैं), यह आसान हो जाता है का उपयोग करते हैं: के रूप में

std::vector<int> results; 
results.reserve(arr1.size() + arr2.size()); 
results.insert(results.end(), arr1.begin(), arr1.end()); 
results.insert(results.end(), arr2.begin(), arr2.end()); 
+0

यहां आपने कहां लिखा है पहला परिणाम। सम्मिलित कथन, आप परिणाम.एंड() के रूप में सम्मिलन का स्थान क्यों सेट करते हैं? शायद मैं गलत समझ रहा हूं कि यह फ़ंक्शन – imkendal

+1

@kjh 'results.end()', stl के साथ कैसे शुरू होता है, शुरुआत में शुरुआत होगी, लेकिन जैसा कि आप संलग्न करते हैं, यह केवल वेक्टर के "अंत" पर मानों को धक्का देता है। –

4

के बजाय एक गतिशील सरणी अभिव्यक्ति टेम्पलेट्स का उपयोग करने का एक और विकल्प है और दोनों को दिखाया गया है (आलसी मूल्यांकन)। कुछ लिंक (आप अतिरिक्त Googling कर सकते हैं):

http://www10.informatik.uni-erlangen.de/~pflaum/pflaum/ProSeminar/ http://www.altdevblogaday.com/2012/01/23/abusing-c-with-expression-templates/ http://aszt.inf.elte.hu/~gsd/halado_cpp/ch06s06.html

आप तो इस्तेमाल में आसानी के लिए देख रहे हैं, की कोशिश:

#include <iostream> 
#include <string> 

int main() 
{ 
    int arr1[] = {1, 2, 3}; 
    int arr2[] = {3, 4, 6}; 

    std::basic_string<int> s1(arr1, 3); 
    std::basic_string<int> s2(arr2, 3); 

    std::basic_string<int> concat(s1 + s2); 

    for (std::basic_string<int>::const_iterator i(concat.begin()); 
    i != concat.end(); 
    ++i) 
    { 
    std::cout << *i << " "; 
    } 

    std::cout << std::endl; 

    return 0; 
} 
0
for (int i = 0; i< arraySize * 2; i++) 
{ 
    if (i < aSize) 
    { 
     *(array3 + i) = *(array1 + i); 
    } 
    else if (i >= arraySize) 
    { 
     *(array3 + i) = *(array2 + (i - arraySize)); 
    } 

} 

यह आपको साथ मदद कर सकता है, यह वैक्टर आवश्यकता नहीं है। मुझे अपने प्रोग्रामिंग क्लास में एक ही समस्या थी। मुझे आशा है कि इससे मदद मिलती है, यह आवश्यक था कि मैंने पॉइंटर अंकगणित का उपयोग किया। यह मानता है कि array1 और array2 आकार "एसाइज"

0

दिए गए int * arr1 और int * arr2 के लिए गतिशील रूप से प्रारंभ किए गए हैं, यह प्रोग्राम int * arr3 दोनों arrays के तत्वों में सम्मिलित है। दुर्भाग्य से, सी ++ में आपको प्रत्येक सरणी के आकारों को जानने की आवश्यकता है जिन्हें आप प्रतिलिपि बनाना चाहते हैं। लेकिन यह चुनने के लिए कोई बाधा नहीं है कि आप arr1 से कितने तत्व कॉपी करना चाहते हैं और कितने arr2 से हैं।

#include <iostream> 
using namespace std; 

int main(){ 
int temp[] = {1,2,3,4}; 
int temp2[] = {33,55,22}; 
int * arr1, * arr2, *arr3; 
int size1(4), size2(3); //size1 and size2 is how many elements you 
//want to copy from the first and second array. In our case all. 
//arr1 = new int[size1]; // optional 
//arr2 = new int[size2]; 

arr1=temp; 
arr2=temp2; 

arr3 = new int; 
//or if you know the size: arr3 = new int[size1+size2]; 

for(int i=0; i<size1+size2; i++){ 
    if (i<size1) 
     arr3[i]=arr1[i]; 
    else 
     arr3[i] = arr2[i-size1]; 
} 
cout<<endl; 
for (int i=0; i<size1+size2; i++) { 
    cout<<arr3[i]<<", "; 
} 

} 
1

यहाँ वही

#include<iostream> 
#include<bits/stdc++.h> 
using namespace std; 
void Concatenate(char *s1,char *s2) 
{ 
    char s[200]; 
    int len1=strlen(s1); 
    int len2=strlen(s2); 
    int j; 
    ///Define k to store the values on Kth address Kstart from 0 to len1+len2; 
    int k=0; 

     for(j=0;j<len1;j++) 
     { 
      s[k]=s1[j]; 
      k++; 

     } 
     for(j=0;j<len2;j++) 
     { 
      s[k]=s2[j]; 
      k++; 
     } 
     ///To place a null at the last of the concatenated string to prevent Printing Garbage value; 
     s[k]='\n'; 

    cout<<s; 
} 

int main() 
{ 
    char s1[100]; 
    char s2[100]; 
    cin.getline(s1,100); 
    cin.getline(s2,100); 
    Concatenate(s1,s2); 

    return 0; 
} 

आशा है कि यह मदद करता है के लिए समाधान है।