web-dev-qa-db-fra.com

C++ concaténer deux tableaux int dans un tableau plus grand

Est-il possible de prendre deux tableaux int en C++?

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

puis les combiner dans un tableau plus grand qui contient les valeurs des deux tableaux?

15
imkendal
int * result = new int[size1 + size2];
std::copy(arr1, arr1 + size1, result);
std::copy(arr2, arr2 + size2, result + size1);

Juste une suggestion, vector fera mieux comme tableau dynamique que comme pointeur

27
texasbruce

Si vous utilisez des tableaux, vous devez allouer un nouveau tableau assez grand pour stocker toutes les valeurs, puis copier les valeurs dans les tableaux. Cela nécessiterait de connaître les tailles de tableau, etc.

Si vous utilisez std::vector au lieu de tableaux (ce qui présente d'autres avantages), cela devient plus 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());
11
Reed Copsey

Une autre alternative consiste à utiliser des modèles d'expression et à prétendre que les deux sont concaténés (évaluation paresseuse). Quelques liens (vous pouvez faire des recherches supplémentaires sur Google):

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 vous recherchez la facilité d'utilisation, essayez:

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

Voici la solution pour la même-

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

J'espère que ça aide.

1
user8208104

Étant donné int * arr1 et int * arr2, ce programme concatène en int * arr3 les éléments des deux tableaux. Malheureusement, en C++, vous devez connaître la taille de chaque tableau que vous souhaitez copier. Mais ce n’est pas un obstacle pour choisir le nombre d’éléments que vous souhaitez copier à partir de arr1 et combien à partir 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]<<", ";
}

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

}

Cela pourrait vous aider, cela ne nécessite pas de vecteurs. J'ai eu un problème similaire dans mon cours de programmation. J'espère que cela aide, il était nécessaire d'utiliser l'arithmétique de pointeur. Cela suppose que array1 et array2 sont initialisés dynamiquement à la taille "aSize"

0
DerfOh