我们如何在C++中修改数组的大小

How can we modify the size of array in C++?

本文关键字:数组 修改 C++ 我们      更新时间:2023-10-16

我有一个用new分配的字符数组,我想修改数组的大小。我可以使用realloc函数吗?最好的方法是什么?

不,你不能。。。realloc()只能与malloc()/free() 一起使用

对分配了new[]的数组的最佳调用是创建一个新数组,然后将数据从一个数组memcpy()到另一个数组。

更好的方法-如果您知道需要调整大小,请使用std::vectorstd::string而不是数组。在内部,它们几乎是相同的数组。

在C++中,最好使用STL std::vector类来处理这种事情。要么是这样,要么是std::string

我有一个用new分配的字符数组,我想修改数组的大小。

您不能调整数组的大小,只能分配一个新的、更大的数组,将内容移动到新数组,然后删除旧数组。

我可以使用realloc函数吗?

如果使用malloc来分配原始阵列,则为。但这在C++中通常是个坏主意,因为在C++中,您通常想要处理非平凡对象的数组,而不是原始内存。

最好的方法是什么?

使用std::string(或者可能使用std::vector<char>)自动管理动态字符阵列。它们还具有使用RAII来降低内存泄漏和其他内存管理错误的风险的优点。

如果数组是动态分配的(通过malloc/calloc/realloc),则可以使用realloc()。如果你有静态数组,你不能调整它的大小。如果你已经分配了新的:

int* Copy = new int[newSize];
std::copy(oldCopy,oldCopy+size,Copy);

但最好的方法是使用c++标准库

中的std::vector<type>

正如其他人所说,您不能调整本身分配的数组的大小,但您可以创建一个更大的数组,将第一个数组的内容复制到第二个数组,然后删除第一个数组。

下面是一个使用std::copy()的示例。

int main(int argc, char** argv) {
    int* arr = new int[5];
    arr[0] = 1;
    arr[1] = 2;
    arr[2] = 3;
    arr[3] = 4;
    arr[4] = 5;
    int* tmp = new int[10];
    std::copy(arr, arr + 5, tmp);
    std::copy(arr, arr, tmp + 5);
    delete[] arr;
    arr = tmp;
    for(int i = 0; i < 10; i++) {
        std::cout << arr[i] << "n";
    }
    delete[] arr;
    std::cin.get();
    return 0;
}

这首先创建一个整数数组并填充它。然后创建一个更大的数组并用第一个数组的内容填充两次,然后显示新的更大数组。

对于字符数组,原理是相同的。

正如其他人所提到的,您在C++中最好的选择是使用标准库。对于可调整大小的字符数组,您可能应该使用std::string或字符串向量,但在某些情况下这有点过头了。