You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:C语言中不使用指针实现移除vector内质数元素的方法

解决思路与代码实现

1. 先实现质数判断辅助函数

要移除vector中的质数,首先得能准确判断一个数是否为质数,核心逻辑如下:

  • 小于2的数直接排除
  • 2是唯一的偶质数
  • 大于2的偶数直接判定为非质数
  • 对奇数,只需检查到其平方根即可,减少计算量
bool isPrime(int num) {
    if (num < 2) return false;
    if (num == 2) return true;
    if (num % 2 == 0) return false;
    for (int i = 3; i * i <= num; i += 2) {
        if (num % i == 0) return false;
    }
    return true;
}

2. 按要求移除vector中的质数

按照题目要求,移除元素时通过后续元素前移覆盖空位的方式实现,不使用指针,具体步骤:

  • 用索引i遍历vector
  • 遇到质数时,从当前位置开始,将后面所有元素依次向前挪一位,然后截断vector的最后一位(因为最后一个元素被复制了一次)
  • 移除元素后i不递增,因为当前位置被新元素填充,需要重新检查;非质数则正常递增索引
#include <vector>
using namespace std;

vector<int> removePrimes(vector<int> vec) {
    int i = 0;
    while (i < vec.size()) {
        if (isPrime(vec[i])) {
            // 前移覆盖被删除的元素
            for (int j = i; j < vec.size() - 1; j++) {
                vec[j] = vec[j + 1];
            }
            vec.pop_back();
        } else {
            i++;
        }
    }
    return vec;
}

测试示例

比如输入vector<int> test = {2,3,4,5,6,7,8,9,10},调用removePrimes(test)后,返回结果为{4,6,8,9,10}。

注意:用while循环而非for循环,是因为移除元素后vector长度会动态变化,for循环的边界处理容易出现遗漏或越界问题。

内容的提问来源于stack exchange,提问作者Arianna Tatani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:07:10