【发布时间】:2021-08-16 07:33:29
【问题描述】:
int numSubarraysWithSum(vector<int>& A, int S) {
unordered_map<int, int> c({{0, 1}});// Line 1
int psum = 0, res = 0;
for (int i : A) {
psum += i;
res += c[psum - S];
c[psum]++;
}
return res;
}
第 1 行是什么意思?我很困惑,因为有两个花括号。
【问题讨论】:
-
given answer 中提到的初始化程序列表。外大括号定义初始化列表本身,内大括号是构造
std::pairs的简写,在映射中用于存储键和对应的值。 -
您可能会看到相同的构造省略了(圆)括号,这是合法的(统一初始化 - 也适用于内部对),但我一般不推荐这样做(尤其是不在模板中),因为在某些情况下可以选择错误的构造函数,例如。 G。
std::vector<int> v{7, 3}使用初始化列表构造函数,但您可能想要选择 third variant of。如果稍后添加初始化列表构造函数,这对于开发中的类尤其重要。 -
所以我个人的建议是更喜欢经典的构造函数调用(你已经看到的圆括号)而不是统一初始化:
std::vector v(7, 3)(三个七)与std::vector v({7, 3})(一个七,一三) 更加清晰。
标签: c++ dictionary stl unordered-map