c++ - 如何使用 C++ 中的指针从数组中删除最后一个元素?
问题描述
我尝试构建一个删除数组最后一个元素的函数。所以我需要一个输入数组及其维度,然后删除最后一项并获得一个新的输出数组。我不想要那个。我的目标是以某种方式使输出数组成为新的输入数组。换句话说,我想用输出数组覆盖输入数组。
所以如果维度是 4,我不想在内存中有一个 4-dim 数组,但删除后只有 3-dim 表。
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
警告这些代码假设输入数组至少有一个元素
但是,使用 anstd::vector<int>
可以为您完成所有这些工作,并且使用起来更实用
std::vector<int> v;
...
v.resize(v.size() - 1);
或者
std::vector<int> v;
...
v.pop_back();
推荐阅读
- hyperledger-fabric - 部署链码时内存不足
- influxdb - 如何在通量查询中的正则表达式条件内转义正斜杠“/”
- javascript - 在浏览器中为节拍器准确计时声音
- python - 如何在 Networkx 和 matplotlib 中标记多图的边缘?
- popover - 如何给 ngbpopover 边框
- python - 蟒蛇协助
- python - Python 3 比较列表变量
- typescript - 如何在 GraphQL 的解析器中获取输入类型的数组
- reactjs - Jest中带有参数的测试函数作为匿名函数
- c++ - c++ openssl 1.1.0l:使用单个 x509 存储支持不同的自签名证书