我的尝试:
为此,我将使用此代码,其中a – 数组A的相关部分的长度(具有未删除元素的部分),ind – 我想要删除的值的索引.
for (int j = ind; j < n; j++) A[j] = A[j+1];
但是,使用这样的代码我无法使用它:
voID deleting(int A[],int& a,int ind){ for (int j = ind; j < a; j++) A[j] = A[j+1]; a--;}int A[6] = {6,1};a = 6for (int i = 0; i < a; i+=2) deleting(A,a,i);
运行此代码后,我得到A [6] = {5,1507485184,1507485184}.因此,它删除了索引0,3处的元素.为什么删除第3个索引?
解决方法 有两种方法可以做到这一点:>走完阵列,将最后的n-i个元素复制到每个偶数的一个位置,或者
>弄清楚最终的状态,然后直接去做.最终状态是第一个n / 2个位置是array [i] = array [2 * i 1],最后n / 2个位置只是最后一个元素的副本.
第一种方法是你要求的,但它做了多次冗余复制 *** 作,第二种方法避免了.
至于你的实现问题,检查j = n-1时会发生什么,并记住A [n]不是数组的有效元素.我建议无论如何都要使copy-everything-forward *** 作成为自己的函数(或者你可以只使用memcpy)
总结以上是内存溢出为你收集整理的如何在不制作数组副本的情况下从C数组中删除每一个值?全部内容,希望文章能够帮你解决如何在不制作数组副本的情况下从C数组中删除每一个值?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)