2014-02-15 130 views
0
bool Is (const vector<vector<int>> &m) 
{ 

bool b = true; 
int i=0, j=0; 

while (i < m.size() && b==true) 
{ 
    while (j < m[0].size() && b==true) 
    { 
     if (m[i][j] == 0) 
     { 
      b=false; 
     } 
     j++; 
    } 
    i++; 
} 
return b; 
} 

問題是,當j終止時,說它變爲4,它在執行i時不會重置爲0。在矩陣中嵌套while循環

+0

那麼,您是否將其重置爲0? –

回答

2

爲什麼不在這裏使用for循環?它們允許你指定一個初始化語句,以及直接配合你的計數器增量的邏輯循環:

for (i = 0; i < m.size() && b; ++i) 
{ 
    for (j = 0; j < m[0].size() && b; ++j) 
    { 
     if (m[i][j] == 0) 
     { 
      b=false; 
     } 
    } 
} 
1
bool Is (const vector<vector<int>> &m) 
{ 

bool b = true; 
int i=0; 

while (i < m.size() && b==true) 
{ int j=0; // declare j here 
    while (j < m[0].size() && b==true) 
    { 
     if (m[i][j] == 0) 
     { 
      b=false; 
     } 
     j++; 
    } 
    i++; 
} 
return b; 
} 
1

我會建議你使用for循環,而不是同時這樣

for (int i = 0; i < m.size() && b; i++) 
{ 
    for (int j = 0; j < m[0].size() && b; j++) 
    { 
     if (m[i][j] == 0) 
      b=false; 
    } 
} 
0

您有權在開始我的迭代前添加如果條件

while (i < m.size() && b==true) 
{ 
    while (j < m[0].size() && b==true) 
    { 
     if (m[i][j] == 0) 
     { 
      b=false; 
     } 
     if (j+1<m[0].size() && b==true){ 
     j++; 
     } 
     else{ 
     j = 0; 
     } 
    } 
i++; 
} 
0

這是一個完美的使用情況下,對於基於範圍循環在C++ 11中引入,因此您無需擺弄索引:

bool b = true; 
for (const auto &row : m) {  // or name it column, depending on your layout 
    for (auto elem : row) { 
     if (elem == 0) { 
      b = false; 
      break; 
     } 
    } 
    if (!b) 
     break; 
} 
return b;