在C语言中,是否可以删除向量中的元素?[已关闭]

b4lqfgs4  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(78)

已关闭。此问题需要details or clarity。它目前不接受回答。
**希望改进此问题?**通过editing this post添加详细信息并阐明问题。

上个月关门了。
Improve this question
我对一个练习有意见。它要求“写一个函数,得到一个向量,并返回去除任何素数的向量”。还有一个建议,“删除向量中的第i个元素意味着从第i+1个元素移动到第(N-1)个元素,以覆盖被删除元素留下的空白点”。我不能用任何指针。
我不知道该怎么做

relj7zay

relj7zay1#

写一个函数来得到一个向量
C中没有vector类型。可能是数组。
我不能用任何指针
hmmm...在C中传递一个数组给一个函数实际上是“传递一个指针”,所以很难避免。但是这个函数可以写得隐藏指针的使用。
现在对于代码,函数可能看起来像这样:

size_t remove_primes(size_t size, int a[]);

字符串
这是一个以数组及其大小为参数的函数,并在删除素数后返回新的大小。
在代码中,它可能是这样的:

size_t remove_primes(size_t size, int a[])
{
    size_t i = 0;
    while ( i < size)
    {
        if (is_prime(a[i]))
        {
            // It's a prime so move all element after i'th element to the left
            //
            // memmove(&a[i], &a[i+i], (size - 1 - i) * sizeof a[0]);
            //
            // or to hide use of pointers
            //
            for (size_t j = i+1; j < size; ++j) a[j-1] = a[j];

            --size;
        }
        else
        {
            ++i;
        }
    }
    return size;
}


或更好的性能,如:

size_t remove_primes(size_t size, int a[])
{
    size_t writer = 0;
    for (size_t reader = 0; reader < size; ++reader)
    {
        if ( ! is_prime(a[reader]))
        {
            // Not a prime so save the value
            a[writer] = a[reader];
            ++writer;
        }
    }
    return writer;
}

相关问题