首页 > 解决方案 > 连接两个数组并将新元素插入数组

问题描述

所以我的目标是将两个数组连接在一起,并在数组的开头插入新数组的新大小。例如,如果

Arr1 = {5, 1,2,3,4}    
and Arr2 = {5, 10, 20, 30, 40 };

NewArr = { 11, 5, 1, 2, 3, 4, 5, 10, 20, 30, 40 }

但是,当我运行我的代码时,我得到

NewArr = {11 1 2 3 4 10 20 30 40 -12851 -12851}

看起来我正在丢失两个数组中的第一个元素。这是我的代码。

short int* ConcatArray(short int* a1, short int* a2) {
    //size of array 1
    int n = *(a1 + 0);
    //size of array 2
    int m = *(a2 + 0);
    int i;
    int size = n + m;

    short int* newArr = new short int[n + m];

    // increase the size by 1
    size++;

    // shift elements forward 
    for (i = size; i >= 1; i--)
        *(newArr + i) = *(newArr + i - 1);

    // insert x at pos 
    *(newArr + 1 - 1) = size;

    // Create new Array 
    for (i = 1; i < n; i++) {
        *(newArr + i) = *(a1 + i);
    }
    
    for (int j = 1; j < m; j++, i++) {
        *(newArr + i) = *(a2 + j);
    }
    

    return newArr;
}

标签: c++arrayspointers

解决方案


如果您首先将值复制到正确的位置,则不需要移动值。这应该做你想要的。

short int *ConcatArray(short int *a1, short int *a2)
{
    short int n = a1[0]; // size of array 1
    short int m = a2[0]; // size of array 2
    short int newSize = n + m + 1;

    short int *newArr = new short int[newSize];

    int i = 0; // current output position in newArr
    newArr[i++] = newSize;

    for (int j = 0; j < n; ++j, ++i) { // copy a1
        newArr[i] = a1[j];
    }

    for (int j = 0; j < m; ++j, ++i) { // copy a2
        newArr[i] = a2[j];
    }

    return newArr;
}

这是在Compiler Explorer上工作的代码。


推荐阅读