2013-11-01 67 views
0

我有01包裝在vector<int>填充行(第一行,第二行等..)矩陣。如何查找第一列和最後一列的索引以及第一行和最後一行不僅包含零或僅包含內部的索引? 我已經迭代四次循環和比較,但有更快,更優雅的方式來做到這一點?如何查找第一列和最後一列的索引以及第一行和最後一行不僅包含零或僅包含內部的索引?

for example result here is columns with indexes 1 and 4 and rows with 1 and 4. 
0 0 0 0 0 
0 0 1 0 0 
0 1 0 0 1 
0 0 0 0 0 
0 0 0 1 0 
+0

那麼在你的例子中是一個'vector '包含'25'' int's?在[行 - 主要順序](http://en.wikipedia.org/wiki/Row-major_order)? – BoBTFish

+0

向我們顯示代碼。 – 0x499602D2

+0

正常和反向迭代器的'std :: find_if'應該很容易完成這項工作。 – rightfold

回答

0

我會說,你只需要兩個迭代:一個迭代的行和一個迭代的列。

如果我沒有理解這個問題的權利,這種編碼應該顯示它如何進行編碼(只是一個草案):

int firstRow = -1; 
int lastRow = -1; 
for (row=0; row<numRows; row++) { 
    int cnt = 0; 
    for (col=0; col<numCols; col++) { 
     cnt += vec[row][col]; 
    } 
    if (cnt != 0 && cnt != numCols) { 
     if (firstRow == -1) firstRow = row; 
     lastRow = row; 
    } 
} 
// output firstRow, lastRow 

執行相同的列。

這種編碼不一定比四次迭代快。當從開始和結束進行四次迭代時,如果列接近極限,它們會更快。但它爲您節省了一些編碼。

相關問題