c++ - 如何避免在嵌套循环中重复自己
问题描述
我有一个嵌套循环的方法,如下所示,我在其中做了一些计算上昂贵的东西和一些计算上便宜的东西:
for(int i = 0; i < SIZE_I; ++i) {
// Do cheap stuff 1
// Do computationally expensive stuff 1
for(int j = 0; j < SIZE_J; ++j) {
// Do cheap stuff 2
// Do computationally expensive stuff 2
for(int k = 0; k < SIZE_K; ++k) {
// Do cheap stuff 3
// Do computationally expensive stuff 3
}
}
}
目前,我调用我的方法一次。但我需要把便宜的东西和贵的东西分开。问题是,如果我开发两种方法,我将需要重复嵌套循环和大量与它们纠缠在一起的代码。
我想知道是否有最佳实践或工具可以帮助我将单个方法分解为两种方法,而无需重复大量代码。或者,如果有一种解决方案可以将便宜的东西和昂贵的东西分开,而无需将我的单一方法分解为两种方法?
解决方案
我最终这样做了:
enum CallStatus {
CallStatus_Cheap = 0,
CallStatus_Expensive
};
bool MyClass::MyMethod(MyClass::CallStatus callStatus)
{
for(int i = 0; i < SIZE_I; ++i) {
switch (callStatus) {
case MyClass::CallStatus_Cheap:
// Do cheap stuff 1
break;
case MyClass::CallStatus_Expensive:
// Do computationally expensive stuff 1
break;
default:
break;
}
for(int j = 0; j < SIZE_J; ++j) {
switch (callStatus) {
case MyClass::CallStatus_Cheap:
// Do cheap stuff 2
break;
case MyClass::CallStatus_Expensive:
// Do computationally expensive stuff 2
break;
default:
break;
}
for(int k = 0; k < SIZE_K; ++k) {
switch (callStatus) {
case MyClass::CallStatus_Cheap:
// Do cheap stuff 3
break;
case MyClass::CallStatus_Expensive:
// Do computationally expensive stuff 3
break;
default:
break;
}
}
}
}
// ...
}
使用enum
as argument/parameter and switch
,现在我可以分别做便宜和昂贵的东西,即使它们非常纠缠在嵌套循环中。
推荐阅读
- image - 在android和ios xamarin表单中单击或点击图像时如何显示数字(1,2,3)
- linux - 在 Centos8 中找不到 virtio_pci.ko(或 virtio-pci.ko)
- c# - 使用 C# 向 Postgresql 数据库批量插入或更新数据
- xaml - 日历日期选择器下一个按钮 UWP 是否有任何刷新事件?
- python - pd.timestamp 'module' 对象不可调用
- r - 在 R 中使用函数和 mapply 创建对其他列求和的新列
- python - 如何在 Mac 上使用 psycopg2 模块
- scala - Scala将案例类列表转换为另一个案例类列表
- django - 我正在尝试在 Django 中添加一个新页面,但出现 404 错误,但我已经添加了 url 和视图
- asynchronous - 等待解析 Observable 进行同步使用