可以使用 C++ STL 算法和 lambda 表达式来实现从整数中移除 2
的功能。下面是一个示例代码,展示了如何使用这些特性:
#include <iostream>
#include <vector>
#include <algorithm>
std::vector<int> removeTwos(const std::vector<int>& arr) {
std::vector<int> newArray;
// 使用 Lambda 和 std::transform 进行处理
std::transform(arr.begin(), arr.end(), std::back_inserter(newArray), [](int num) {
int result = 0;
int place = 1; // 用于记录当前位数
while (num > 0) {
int digit = num % 10; // 提取当前位数字
if (digit != 2) { // 如果不是2,则加入结果
result += digit * place;
place *= 10; // 更新位置(十进制)
}
num /= 10; // 去掉当前位
}
return (result == 0 && num == 0) ? 0 : result; // 特殊情况处理:如果全为0则返回0
});
return newArray;
}
int main() {
// 示例输入
std::vector<int> arr = {12, 23, 45, 222, 678, 92, 0};
std::vector<int> result = removeTwos(arr);
// 输出结果
for (int num : result) {
std::cout << num << " ";
}
return 0;
}
程序说明
引入必要头文件:程序中使用
<iostream>
和<vector>
来支持输入输出和动态数组,还引入<algorithm>
用于 STL 算法。定义
removeTwos
函数:- 输入参数为一个整型向量
arr
。 - 创建一个新的向量
newArray
用于存储处理后的结果。
- 输入参数为一个整型向量
使用
std::transform
:- 对于每个元素,通过 lambda 表达式对其进行处理。
- 在 lambda 内部实现逐位提取并检查是否为
2
的逻辑。
逐位提取数字:
- 使用与之前相同的逻辑,通过循环提取每个数字,并构建新的数字去掉所有的
2
。
- 使用与之前相同的逻辑,通过循环提取每个数字,并构建新的数字去掉所有的
特殊情况处理:
- 在返回时,如果最终结果和原始值都是零,确保返回零。
主函数 (
main
):- 定义示例输入并调用处理函数,然后输出结果。
通过这种方式,我们能够更简洁地利用 STL 和 lambda 表达式实现所需的功能,提高代码的可读性和可维护性。
内容由零声教学AI助手提供,问题来源于学员提问