Inconsistance发生!
这段代码很顺利
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> num_freq_map;
for(const auto &ele : nums) {
++num_freq_map[ele];
}
}
};
但当我从unordered_map<int, int> num_freq_map;
更改为unordered_map<int, int> num_freq_map
()
;
时,会附加一对括号。
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> num_freq_map();
for(const auto &ele : nums) {
++num_freq_map[ele];
}
}
};
我收到了一个错误:
Line 6: lvalue required as increment operand
为什么呢?初始化时我的变量num_freq_map
会发生什么?
我应该如何学习这类东西。阅读标准模板库源代码,对吗?
答案 0 :(得分:1)
unordered_map<int, int> num_freq_map();
将num_freq_map
定义为指向不接受任何参数并返回unordered_map<int, int>
的函数的指针。但不要担心,因为
unordered_map<int, int> num_freq_map;
已经为您调用了正确的默认构造函数。如果要对读者明确调用,在C ++ 11中可以使用大括号初始化:
unordered_map<int, int> num_freq_map{};
答案 1 :(得分:1)
unordered_map<int, int> num_freq_map();
解释如下:
num_freq_map
是一个没有参数的函数,返回unordered_map<int, int>
。
要了解这类内容,请阅读Marshall Cline的C ++ FAQ。
没有“STL源代码”这样的东西。 STL有许多不同的实现。我还怀疑读取STL源代码是有用的,除非你有一些非常具体的问题。