关于auto的补充C++,Leetcode 一道题

概念

        auto是一种类型说明符,使用它可以让编译器通过初始值替我们自动分析表达式所属类型。也就是说必须有初始值。

注意:

        auto可以用一条语句一次性声明多个变量,但这些变量的数据类型必须相同,否则就换行分别声明即可。

举个例子:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> nums = {1, 2, 3, 4, 5};
    for (std::vector<int>::const_iterator it = nums.begin(); it != nums.end(); ++it) {
        int x = *it;  // 显式指定循环变量 x 的数据类型为 int
        std::cout << x << " ";
    }
    return 0;
}

如果使用auto会效率高很多,修改如下:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> nums = {1, 2, 3, 4, 5};
    for (const auto &x : nums) {
        std::cout << x << " ";
    }
    return 0;
}

这种写法可以在不需要索引的情况下,以一种简洁和清晰的方式遍历容器或数组的所有元素。

一个小细节:

        在 C++ 中,直接写成 auto x : nums 是不合法的语法。范围-based for 循环要求在 auto 后面必须跟引用修饰符(&&&),以获取元素的引用或移动语义。

所以正确的应该写为

for (auto &x : nums) {
    // 循环体
}

或者如果只需要读取元素而不修改,则使用常量引用:

for (const auto &x : nums) {
    // 循环体
}

Leetcode一道题:

        经典动态规划:最大子数组和问题

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int pre = 0, maxAns = nums[0];
        for (const auto &x: nums) {
            pre = max(pre + x, x);
            maxAns = max(maxAns, pre);
        }
        return maxAns;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值