MST
星途 面试题库

面试题:C++ Lambda表达式返回类型推导在复杂场景下的应用

假设有一个std::vector<int>,你需要使用Lambda表达式对其进行排序,排序规则是先按绝对值大小排序,如果绝对值相同则按原数从小到大排序。请写出使用Lambda表达式实现此功能的代码,并详细说明Lambda表达式返回类型推导的过程,尤其是在涉及到比较复杂的逻辑判断时是如何推导的。
25.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>

int main() {
    std::vector<int> vec = {3, -2, 1, -4, 5};

    std::sort(vec.begin(), vec.end(), [](int a, int b) {
        int absA = std::abs(a);
        int absB = std::abs(b);
        if (absA != absB) {
            return absA < absB;
        } else {
            return a < b;
        }
    });

    for (int num : vec) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

Lambda表达式返回类型推导过程

  1. 自动推导规则:在C++14及以后版本,Lambda表达式的返回类型可以自动推导。编译器通过分析return语句来确定返回类型。
  2. 复杂逻辑判断下的推导:在上述Lambda表达式中,有两个return语句。第一个return语句return absA < absB;返回的是一个bool类型,表示absA是否小于absB。第二个return语句return a < b;同样返回bool类型,表示a是否小于b。由于所有return语句返回的都是bool类型,编译器就可以推导出该Lambda表达式的返回类型为bool。这符合std::sort函数对比较函数的要求,std::sort要求比较函数返回一个bool值,用于判断两个元素的顺序关系。