我需要将数组转换{4, 2 ,5}为{4, 2, 5, 4, 2, 5}.这是我的输出:{4, 2, 5, 3.21143e-322, 0, 2},这显然是不正确的.但我似乎无法在我的逻辑中弄清楚这个问题.也许另一种观点可以找到这个问题.
这是我的代码:
void repeatArray(double* oldArray, int size) {
int newSize = size * 2;
double* newArray = new double[newSize];
for (int i = 0; i < size; i++) {
newArray[i] = oldArray[i];
}
for (int i = 0; i < size; i++) {
newArray[size+i] = oldArray[i];
}
oldArray = newArray;
delete [] newArray;
}
int main() {
double* oldArray = new double[3];
oldArray[0] = 4;
oldArray[1] = 2;
oldArray[2] = 5;
repeatArray(oldArray, 3);
for (int i=0; i<6; i++)
cout << oldArray[i] << endl;
delete []oldArray;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
问题是仅仅将新数组分配给指针repeatArray()并不会从外部改变它.
你可以做的repeatArray()是返回新创建的数组.
double* repeatArray(double* oldArray, int size) {
int newSize = size * 2;
double* newArray = new double[newSize];
for (int i = 0; i < size; i++) {
newArray[i] = oldArray[i];
}
for (int i = 0; i < size; i++) {
newArray[size+i] = oldArray[i];
}
delete [] oldArray;
return newArray;
}
Run Code Online (Sandbox Code Playgroud)
并在main():
oldArray = repeatArray(oldArray, 3);
一种可能更好的方法std::vector是根据需要自动调整大小.
| 归档时间: |
|
| 查看次数: |
3140 次 |
| 最近记录: |