ZBLOG

使用stl算法和lamba直接实现

可以使用 C++ STL 算法和 lambda 表达式来实现从整数中移除 2 的功能。下面是一个示例代码,展示了如何使用这些特性:

  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. std::vector<int> removeTwos(const std::vector<int>& arr) {
  5. std::vector<int> newArray;
  6. // 使用 Lambda 和 std::transform 进行处理
  7. std::transform(arr.begin(), arr.end(), std::back_inserter(newArray), [](int num) {
  8. int result = 0;
  9. int place = 1; // 用于记录当前位数
  10. while (num > 0) {
  11. int digit = num % 10; // 提取当前位数字
  12. if (digit != 2) { // 如果不是2,则加入结果
  13. result += digit * place;
  14. place *= 10; // 更新位置(十进制)
  15. }
  16. num /= 10; // 去掉当前位
  17. }
  18. return (result == 0 && num == 0) ? 0 : result; // 特殊情况处理:如果全为0则返回0
  19. });
  20. return newArray;
  21. }
  22. int main() {
  23. // 示例输入
  24. std::vector<int> arr = {12, 23, 45, 222, 678, 92, 0};
  25. std::vector<int> result = removeTwos(arr);
  26. // 输出结果
  27. for (int num : result) {
  28. std::cout << num << " ";
  29. }
  30. return 0;
  31. }

程序说明

  1. 引入必要头文件:程序中使用 <iostream><vector> 来支持输入输出和动态数组,还引入 <algorithm> 用于 STL 算法。

  2. 定义 removeTwos 函数

    • 输入参数为一个整型向量 arr
    • 创建一个新的向量 newArray 用于存储处理后的结果。
  3. 使用 std::transform

    • 对于每个元素,通过 lambda 表达式对其进行处理。
    • 在 lambda 内部实现逐位提取并检查是否为 2 的逻辑。
  4. 逐位提取数字

    • 使用与之前相同的逻辑,通过循环提取每个数字,并构建新的数字去掉所有的 2
  5. 特殊情况处理

    • 在返回时,如果最终结果和原始值都是零,确保返回零。
  6. 主函数 (main)

    • 定义示例输入并调用处理函数,然后输出结果。

通过这种方式,我们能够更简洁地利用 STL 和 lambda 表达式实现所需的功能,提高代码的可读性和可维护性。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21700

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?