如何使用声明类型简化此代码
How to simplify this code using decltype?
我必须通过找到使用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;
}
如果我正确理解了问题,则要使用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
);
}
这是一个简化:
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
似乎也是一个很好的改进。
或进一步:
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
在地图和数组之间更改类型。
相关文章:
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 类没有命名C++代码中的类型错误
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 扩展C++生成的代码的模板参数类型名称
- 有没有办法通过使用十进制 ASCII 代码自动类型扣除来获取字符?
- 我在 C++ 代码中遇到错误警告:控制到达非空函数 [-Wreturn 类型] 的末尾
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 提供对不同类型的数据(建议、代码审查)的线程安全访问的类
- 当前不会命中断点。没有调试器目标代码类型的可执行代码与此文件关联
- 我的代码中是否有任何类型的错误,因为它没有给出正确的输出
- 用于C++代码的 API 监视器类型定义 (XML)
- 避免使用 std::any 编写相同的重复类型检查代码
- turbo 为什么我的C++代码中出现错误类型名称预期"错误?
- 具有相同数据类型代码的相同逻辑代码在 Java 中传递,但不在 C++ 中传递?
- 如何在数组类型的模板代码中计算std::size_t
- 将-Wtype限制与类型泛型代码一起使用
- 将fwrite转换为C++类型代码以写入二进制文件
- 当没有浮点数据类型时,为什么此代码会出现浮点异常
- 该文件中的代码类型*.cpp #define mdTyVzgFy4_0UFy9GimmM
- C++ 代码类型替换失败