作者etrexetrex (moonet)
看板C_and_CPP
標題Re: [問題] 動態調整深度的迴圈(loop)
時間Sun Nov 1 12:03:31 2009
我想到的解法:
是以數字進位的想法為基礎
以單迴圈模擬多層迴圈
在迴圈開始前就設定每一層級的 min 跟 max
===== 原本的程式碼 =====
#include <iostream>
using namespace std;
void main()
{
int max[] = {1 ,7, 6, 5};
int min[] = {0 ,4, 3, 2};
int forLoop[] = {0 ,4, 3, 2};
for(forLoop[1] = min[1] ; forLoop[1] <= max[1] ; forLoop[1]++)
for(forLoop[2] = min[2] ; forLoop[2] <= max[2] ; forLoop[2]++)
for(forLoop[3] = min[3] ; forLoop[3] <= max[3] ; forLoop[3]++)
{
cout << forLoop[1] << " " << forLoop[2] << " " << forLoop[3] << " ";
cout << endl;
}
system("pause");
}
===== 修改後程式碼 =====
#include <iostream>
using namespace std;
void main()
{
int max[] = {1 ,7, 6, 5};
int min[] = {0 ,4, 3, 2};
int forLoop[] = {0 ,4, 3, 2};
int length = sizeof(max) / sizeof(max[0]);
while(forLoop[0] == 0)
{
//在這裡使用變數
for(int i = 1 ; i < length ; i++)
cout << forLoop[i] << " ";
cout << endl;
//以下是進位處理
forLoop[length-1] ++;
for(int i = length-1 ; i >= 0 ; i--)
if( forLoop[i] > max[i])
{
forLoop[i] = min[i];
forLoop[i-1] ++;
}
}
system("pause");
}
=====
兩邊的程式碼功能是一樣的
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.166.85
→ etrexetrex:要改層數可以直接加在 max 跟 min 陣列後面 11/01 12:11
→ softwind:動態調整迴圈深度 就是要gen function body了 11/01 12:42
→ softwind:不用function object解決 應該不符合原本的要求 11/01 12:43
→ etrexetrex:蛤? 11/01 12:45
→ softwind:sorry 不是針對你 而是這討論串 都沒有人用ftor... 11/01 12:48