在C++中动态更改数组大小

Has*_*san 0 c++

我需要将数组转换{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)

Min*_*ina 5

问题是仅仅将新数组分配给指针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是根据需要自动调整大小.