2012-10-09 9 views

risposta

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

Proprio suggerimento, vector farà meglio come una matrice dinamica anziché il puntatore

+0

è 'result' è un tipo' std :: vector'? – LAL

8

Se si utilizzano gli array, è necessario allocare un nuovo array abbastanza grande da memorizzare tutti i valori, quindi copiare i valori negli array. Ciò richiederebbe conoscere le dimensioni degli array, ecc

Se si utilizza std::vector invece di array (che ha altri vantaggi), questo diventa più semplice:

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

Qui dove hai scritto la prima istruzione results.insert, perché imposti la posizione di inserimento come results.end()? forse sto fraintendendo come funziona questa funzione – imkendal

+1

@kjh 'results.end()', con lo stl, inizialmente sarà l'inizio, ma mentre si aggiunge, si limitano a spingere i valori alla "fine" del vettore. –

4

Un'altra alternativa è usare i modelli di espressione e far finta che i due siano concatenati (valutazione lazy). Alcuni link (si può fare ulteriore 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

Se sono alla ricerca di facilità d'uso, provare:

#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)); 
    } 

} 

Questo potrebbe aiutare a lungo, non richiede vettori. Ho avuto un problema simile nella mia classe di programmazione. Spero che questo aiuti, è stato necessario che io abbia usato l'aritmetica del puntatore. Ciò presuppone che array1 e array2 siano inizializzati dinamicamente alla dimensione "aSize"

0

Dato int * arr1 e int * arr2, questo programma Concatena in int * arr3 gli elementi di entrambi gli array. Sfortunatamente, in C++ devi conoscere le dimensioni di ogni array che vuoi copiare. Ma questo non è un impedimento per scegliere quanti elementi vuoi copiare da arr1 e quanti da 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

Ecco la soluzione per il stesso-

#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; 
} 

Speranza che aiuta.