【发布时间】:2022-01-04 08:35:59
【问题描述】:
我必须定义一个函数来删除数组中的一个元素,这里是代码
void delete_element(int a[], int n, int pos)
{
if (pos>=n)
pos=n-1;
else if (pos<0)
pos=0;
for (int i=pos-1;i<n-1;i++)
{
a[i]=a[i+1];
}
--n;
}
这是一个例子:
int n;
printf("Enter the length of the array: ");
scanf("%d", &n);
int A[n]
for (int i=0;i<n;i++)
scanf("%d", &A[i]);
delete_element(A,n,2);
假设n=5,A = {1,2,3,4,5},运行上述代码后,会打印出{1,3,4,5,5}
当我使用 int n 作为参数时,函数会删除我想要的元素,但最后一个元素会在数组中出现两次。搜索了一下,发现使用int &n可以解决问题,但是不明白这里的原因。如果您能帮我解决这个问题,我将不胜感激!
【问题讨论】:
-
这是 C++ 代码,不是 C。
-
请出示minimal reproducible example,猜测代码的调用者不会更新数组的大小?
-
尝试搜索“通过引用传递值”?
-
这个函数不会删除任何东西,不管
n是怎么取的。它只是移动数组中的元素。 -
您无法更改 C 样式数组的大小,因此您无法从中删除元素。你只能改变他们的价值观,这就是你正在做的事情。要实际删除一个元素,您必须创建一个减小大小的新数组并将元素复制到该新数组中。但是,在 C++ 中,您应该更喜欢
std::vector<T>,它可以为您提供所需的可调整大小数组的语义。
标签: c++ arrays pointers parameters