概念
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;
}
};