gpt4 book ai didi

c++ - 如何在不复制数组的情况下从 C++ 数组中删除每个第二个值?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:08:01 24 4
gpt4 key购买 nike

问题:我想让数组 A[6] = {6, 5, 4, 3, 2, 1} 成为 A[6] = {5, 3 , 1, 1, 1, 1}。换句话说 - “删除”从第 0 开始的每隔一个值,并将所有其他值向左移动。

我的尝试:

为此,我将使用此代码,其中 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, 5, 4, 3, 2, 1};
a = 6

for (int i = 0; i < a; i+=2)
deleting(A, a, i);

运行此代码后,我得到了 A[6] = {5, 4, 2, 1, 1507485184, 1507485184}。所以,它删除了索引 0、3 处的元素。为什么要删除第 3 个索引?

最佳答案

有两种方法:

  1. 遍历数组,将最后的 n-i 个元素向前复制一个位置,每个偶数 i,或

  2. 弄清楚最终状态,然后直接进入那个状态。最终状态是前n/2位是array[i]=array[2*i + 1],最后n/2 code> 地方只是最后一个元素的拷贝。

第一种方法是您所要求的,但它进行了多次冗余复制操作,而第二种方法则避免了。

至于您的实现问题,请检查当j=n-1 时会发生什么,并记住A[n] 不是数组的有效元素。我建议无论如何都要让复制一切向前操作成为它自己的功能(或者你可以只使用 memcpy)

关于c++ - 如何在不复制数组的情况下从 C++ 数组中删除每个第二个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41017830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com