【发布时间】:2021-08-28 10:31:33
【问题描述】:
我有这段代码,其目的只是将所有区域初始化为false:
Zone per_zone;
std::fill_n(per_zone.begin(), per_zone.capacity(), false);
System per_system;
std::fill_n(per_system.begin(), per_system.capacity(), per_zone);
std::fill_n(m_pMemory->TrackingZonesShowingLogicalParcels.begin(), m_pMemory->TrackingZonesShowingLogicalParcels.capacity(), per_system);
我用下面的代码对其进行了重构,因为我认为它表达的意图更清楚,而且更短。
for (auto& group : m_pMemory->TrackingZonesShowingLogicalParcels)
for (auto& system : group)
for (auto& zone : system)
zone = false;
我真的会使用算法,因为我知道 - 一般来说 - 算法比 for 循环更清楚地表达意图,但我认为情况并非如此。
我错了吗? 还有另一种方法可以使用 std 算法使代码更具可读性吗?
请注意,我不关心性能。 谢谢。
【问题讨论】:
-
什么是
Zone?它应该有一个构造函数来获取值并初始化元素,以便您可以编写Zone per_zone{false};或者将其设为默认值,因此您只需编写Zone per_zone; -
鉴于缺乏上下文和细节,“什么更具可读性”纯粹是基于意见的
-
一般成员应该通过调用构造函数来初始化,如果一个类不这样做但你必须做一些额外的事情我会认为类坏了(好吧,在某些特殊情况下必须例外)
-
与你的问题无关,但我真的希望
capacity()和std::vector<>::capacity()不是一回事 -
将基于意见的可读性部分放在一边。这两个代码块表达了两种不同的东西。它们可能导致相同的结果,但是如果您阅读代码而不仔细查看数据类型,它们具有不同的含义。因此,如果我应该在这两个(或任何其他解决方案)之间做出决定,它会根据它的含义是否正确来决定。
标签: c++ readability