求助: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
相关产品推荐
相关产品推荐

