我们如何在C++中修改数组的大小
How can we modify the size of array in C++?
我有一个用new分配的字符数组,我想修改数组的大小。我可以使用realloc函数吗?最好的方法是什么?
不,你不能。。。realloc()
只能与malloc()
/free()
一起使用
对分配了new[]
的数组的最佳调用是创建一个新数组,然后将数据从一个数组memcpy()
到另一个数组。
更好的方法-如果您知道需要调整大小,请使用std::vector
或std::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或字符串向量,但在某些情况下这有点过头了。
- 为什么可以修改数组 b?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何修改代码以打印出数组 v2
- 使用指针算法修改函数中的 2D 数组
- 当使用我在一个函数、另一个函数中修改的数组时,在我的输出中得到一个奇怪的负数
- 将数组传递给递归函数,同时C++修改它
- 数组在 C++ 中不使用 static in 函数时不会修改
- C++:通过函数修改数组
- 修改字符串数组中的字符串
- 我在代码中收到一个运行时错误,该错误如何通过修改最多一个元素来查找数组是否可以变得不减少
- 我正在尝试修改一个字节数组并通过 JNI 将其从 c++ 发送到 java
- 修改排序的数组或每次对数组进行排序
- 如何修改数组,从中删除空格,然后将其存储在新数组中
- 从字符串修改char数组
- 循环赋值的多维数组:表达式必须是可修改的左值
- 尝试修改数组时出现写访问冲突
- 当我们在 C++ 中的参数中传递它们时,如何修改一些数组而不修改其他数组
- 修改函数内的多维数组
- 使用指标后数组未修改
- 从uint8_t数组修改数据非常慢