我必须通过找到使用decltype
的好地方来简化代码。
还有auto
在此代码中不起作用的地方吗?
map<int, float> m = build_map();
std::pair<int, int> scaling_factor(2, 3);
std::pair<int, int>* scaled_array = new std::pair<int, int>[m.size()];
int i(0);
for(map<int, float>::iterator it=m.begin(); it!=m.end(); it++, i++)
{
std::pair<int, int> tmp = *it;
tmp.first*= caling_factor.first;
tmp.second*= scaling_factor.second;
scaled_array[i] = tmp;
}
答案 0 :(得分:0)
如果我对问题的理解正确,那么您想使用auto
关键字来简化代码。
首先想到的是一个范围循环:
std::map<int, float> m = build_map();
std::pair<int, int> scaling_factor(2, 3);
std::vector<std::pair<int, int>> scaled_array;
scaled_array.reserve(m.size());
for (auto &el : m) {
scaled_array.emplace_back(
el.first * scaling_factor.first,
el.second * scaling_factor.second
);
}
答案 1 :(得分:0)
这里是一个简化:
auto m = build_map();
const std::pair<int, int> scaling_factor(2, 3);
auto* scaled_array = new std::pair<int, int>[m.size()];
int i(0);
for (std::pair<int, float> copy : m) // copy and conversion
{
copy.first *= caling_factor.first;
copy.second *= scaling_factor.second;
scaled_array[i++] = copy;
}
std::transform
似乎也是一个很好的改进。
答案 2 :(得分:0)
或更远:
auto m = build_map();
auto scaling_factor = std::make_pair(2, 3);
std::vector<scaling_factor> scaled_array;
实际上有人将其更改为矢量,所以原来是:
auto scaled_array = new decltype(scaling_factor)[m.size()];
但是您需要确定它是否更易读,尤其是因为它混淆了.second
在映射和数组之间的类型。