Re: [問題] 動態調整深度的迴圈(loop)

看板C_and_CPP作者 (moonet)時間16年前 (2009/11/01 12:03), 編輯推噓0(005)
留言5則, 2人參與, 最新討論串7/7 (看更多)
我想到的解法: 是以數字進位的想法為基礎 以單迴圈模擬多層迴圈 在迴圈開始前就設定每一層級的 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

11/01 12:11, , 1F
要改層數可以直接加在 max 跟 min 陣列後面
11/01 12:11, 1F

11/01 12:42, , 2F
動態調整迴圈深度 就是要gen function body了
11/01 12:42, 2F

11/01 12:43, , 3F
不用function object解決 應該不符合原本的要求
11/01 12:43, 3F

11/01 12:45, , 4F
蛤?
11/01 12:45, 4F

11/01 12:48, , 5F
sorry 不是針對你 而是這討論串 都沒有人用ftor...
11/01 12:48, 5F
文章代碼(AID): #1AxGYR6A (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AxGYR6A (C_and_CPP)