这是我的代码的一部分:
int getLength(const vector<int> &arr) {
auto n=arr.size(),dis=n;
unordered_map<int,decltype(dis)> S;
//...
}
到现在为止还挺好。现在我没有为我的int
硬编码“std::unordered_map
”,而是尝试将其更改为:unordered_map<decltype(arr.front()),decltype(dis)> S;
或unordered_map<decltype(arr)::value_type,decltype(dis)> S;
或unordered_map<decltype(arr[0]),decltype(dis)> S;
似乎没有工作。在这里使用decltype()
的正确语法是什么?
在这里使用decltype的正确语法是什么?
decltype(arr.front())
和decltype(arr[0])
都可以,但不幸的是,他们都返回了对const int
的引用(考虑到arr
是一个常量向量)
您必须通过示例删除引用和const
std::unordered_map<
std::remove_const_t<std::remove_reference_t<decltype(arr.front())>>,
decltype(dis)> S;
使用::value_type
更好(恕我直言),因为你避免了常量,所以你必须只删除引用,所以你可以写
std::unordered_map<
std::remove_reference_t<decltype(arr)>::value_type,
decltype(dis)> S;