[英]How to delete the last element from array with pointers in C++?
我尝试建立一个删除数组最后一个元素的函数。 因此,我需要一个输入数组及其尺寸,然后删除最后一项并获得一个新的输出数组。 我不要 我的目标是以某种方式使输出数组成为新的输入数组。 换句话说,我想用输出数组覆盖输入数组。
因此,如果维数为4,则我不希望内存中有4维数组,而删除后只希望有3维表。
void del (int* ptr_array, int dim) {
int* temp = ptr_array; //Hold the very first address of the input array.
ptr_array = new int[dim - 1]; // Let the address of the input array be
// the address of new output array. Overwritting.
for (int i = 0; i < dim - 1; i++) {
ptr_array = (temp+i); // Will it remember what is temp+1 if I have
// already overwritten the arrays?
ptr_array++;
}
//delete[] ptr_array; - this one is out of the questions - deletes now the input table.
}
您能告诉我这段代码有什么问题吗? -实际上,它没有任何改变
在你的功能
for (int i = 0; i < dim - 1; i++) {
ptr_array = (temp+i); // Will it remember what is temp+1 if I have
// already overwritten the arrays?
ptr_array++;
}
什么都不做,你想要
for (int i = 0; i < dim - 1; i++) {
ptr_array[i] = temp[i];
}
请注意,注释中的删除无效,因为您不删除new []的结果,而是删除分配的数组中的指针
如果通话像
int * v = ...;
del(v);
// here v is unchanged
可能您想修改v ,在这种情况下,您可以返回新数组或使用带引用的输入输出变量
第一种可能性:
int* del (int* ptr_array, int dim) {
int* new_array = new int[dim - 1];
for (int i = 0; i < dim - 1; i++) {
new_array[i] = ptr_array[i];
}
delete[] ptr_array;
return new_array;
}
同
int * v = ...;
v = del(v);
第二种可能性
void del (int*& ptr_array, int dim) {
int* new_array = new int[dim - 1];
for (int i = 0; i < dim - 1; i++) {
new_array[i] = ptr_array[i];
}
delete[] ptr_array;
ptr_array = new_array;
}
同
int * v = ...;
del(v);
// here v is the new array
警告这些代码假定输入数组至少包含一个元素
但是,使用std::vector<int>
可以为您完成所有操作,使用起来更实用
std::vector<int> v;
...
v.resize(v.size() - 1);
要么
std::vector<int> v;
...
v.pop_back();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.