c++ - 连接两个数组并将新元素插入数组
问题描述
所以我的目标是将两个数组连接在一起,并在数组的开头插入新数组的新大小。例如,如果
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;
}
解决方案
如果您首先将值复制到正确的位置,则不需要移动值。这应该做你想要的。
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上工作的代码。
推荐阅读
- mysql - 如何在 sqlfiddle 调用存储过程?
- docker - Pip/pipenv 在 Docker 容器中找不到包?
- apache-spark-sql - pyspark 在数据框中传递多个选项
- java - 为什么 Vert.x 为每个线程附加 2 个事件循环
- android - 如何在 MVVM 中重试 API 调用
- python - 错误:模块“sqlite3”没有连接成员
- cookies - 在 cloudflare worker header.set('Set-Cookie' 函数的 'Set-Cookie' 标头中设置多个 cookie
- javascript - 在这种特定情况下,如何将数据从 Django 中的模板传递到 Javascript
- node.js - Express 中间件无限循环
- angular7 - ngx-chips tag-input-dropdown 在 iPhone 中不显示自动建议