2012-10-09 214 views

Respuesta

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

Sólo sugerencia, vector harán mejor como una matriz dinámica en lugar de puntero

+0

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

8

Si está utilizando matrices, es necesario asignar una nueva matriz suficientemente grande para almacenar todos los valores, a continuación, copiar los valores en los arrays. Para ello sería necesario conocer los tamaños de matriz, etc.

Si utiliza std::vector en lugar de matrices (que tiene otros beneficios), esto se hace más simple:

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

Aquí donde usted ha escrito la primera declaración results.insert, ¿por qué se establece la ubicación de inserción como results.end()? tal vez estoy malinterpretando cómo funciona esta función – imkendal

+1

@kjh 'results.end()', con stl, inicialmente será el comienzo, pero a medida que se agrega, simplemente empuja los valores en el "extremo" del vector. –

4

Otra alternativa es el uso de las plantillas de expresión y pretender los dos se concatenan (evaluación perezosa). Algunos enlaces (se puede hacer googlear adicional):

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

Si están buscando la facilidad de uso, pruebe:

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

} 

Esto podría ayudarle a lo largo, que no requiere de vectores. Tuve un problema similar en mi clase de programación. Espero que esto ayude, fue necesario que use la aritmética del puntero. Esto supone que array1 y array2 se inicializan dinámicamente al tamaño "aSize"

0

Dado int * arr1 e int * arr2, este programa Concatena en int * arr3 los elementos de ambas matrices. Desafortunadamente, en C++ necesita conocer los tamaños de cada matriz que desea copiar. Pero esto no es un impedimento para elegir cuántos elementos desea copiar de arr1 y cuántos de 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

Aquí está la solución para el mismo:

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

Espero que ayuda.