将C++数组的大小增加一倍
Doubling the Size of a C++ Array
下面的代码片段是我将数组大小增加2倍的尝试。我遇到了一些问题。最重要的是,我应该对原始数组调用delete吗?
void enlarge(int *array, int* dbl int size) {
for (int i = 0; i < size; i++)
dbl[i] = array[i];
delete array;
array = dbl;
}
您有几个问题:
- 修改
array
仅修改指针的本地副本。如果希望调用代码能够观察到修改,则需要引用指针 - 删除使用
new[]
分配的内容时,需要使用delete[]
- 您试图复制过多的项,这样做会使原始数组溢出
void enlarge(int *& array, int size) {
// ^
// Use a reference to a pointer.
int *dbl = new int[size*2];
for (int i = 0; i < size; i++) {
// ^
// Iterate up to size, not size*2.
dbl[i] = array[i];
}
delete[] array;
// ^
// Use delete[], not delete.
array = dbl;
}
但是,我强烈建议使用std::vector<int>
;它会根据需要自动调整大小,这对你来说是完全透明的。
关键字double不能用作变量名,在将新的分配分配给同一指针之前,必须删除以前的数组,循环应该从prev数组(而不是2*size)中复制项目的size no
void enlarge(int **array, int size) {
int *d = new int[size*2];
for (int i = 0; i < size; i++)
d[i] = *array[i];
delete [] *array;
*array = d;
}
如果上一个数组是int*arr,size是数组arr的当前大小,则调用应为:enlarge(&arr, size)
相关文章:
- 数组索引的值没有增加
- 使用strcpy将char数组的元素复制到另一个数组
- 我的 c++ 应用程序中的运行时间从 0 增加到 60 太快了(例如一毫秒或一微秒)
- C :用sizeof()operator在for for loop中增加一个int变量,只能工作一次
- mktime()函数的混淆行为:将tm_hour计数增加一
- 宽度和高度增加2倍后缩小 打开GL C++
- 创建一个 c++ 程序,根据整数是奇数还是偶数,将整数数增加一倍和三倍
- 有没有一种方法可以在C++中增加int的大小而不使用long
- c++ 字符串在打印时缩短了一倍
- C++ 在一周中的几天内增加工作时间的公式
- 将C++数组的大小增加一倍
- 将某个时间增加一天
- 将一个大整数缩放一倍
- 在c++中,空字符串的长度增加一
- 有没有一种从0增加到1的位技巧
- 有没有一种方法可以自动地赋值指针并增加计数器,而不需要锁?
- 如果我增加一个数组变量会发生什么呢?
- 将文件读入结构体时大小增加10倍
- std::字符串到整数/双倍在一次传递中
- OpenCV在一帧中显示三倍的图像