2015-06-14 138 views
-1

我想用C++中的一個矩陣的值填充一個矢量。我不是很自信的用這個程序(我不知道還有關於指針,我不知道如果我需要在這裏),但是我想這個在C++中添加一個2x2矩陣到一個矢量中

int auxMat[gray.rows][gray.cols]; 
vector<int> collectionSum; 
collectionSum.push_back(auxMat); 

當我嘗試編譯我收到它說

參數無效「考生的錯誤:無效的push_back(const int的&)

誰能告訴我還判定是否有可能做的,我該怎麼解決呢?

我看了一些關於刪除緩存,改變了我的Eclipse編譯器,我的C++版本,但我不認爲這個問題是這麼大。

+0

到'的push_back()'的值個別。 –

回答

0

您無法將矩陣推回到矢量中。你可以做的是預先分配的內存爲您的載體(超速的事情了),然後使用std::vector<>::assign成員函數從矩陣「拷貝」到載體:

vector<int> collectionSum(gray.rows * gray.cols); // reserve memory, faster 
collectionSum.assign(*auxMat, *auxMat + gray.rows * gray.cols); 

這應該是非常快。否則,你可以推回一個循環中的每個單獨的元素。

編輯

May I treat a 2D array as a contiguous 1D array?瞭解有關可能的不確定的行爲(註釋感謝@juanchopanza)的一些技術性問題。由於矩陣的存儲是連續的,因此我相信代碼是安全的。

+0

我認爲有一些關於超出界限的問題,這使得這在技術上是UB,儘管很難想到這種方法無效的實現。我會看看我能否找到一些鏈接。 – juanchopanza

+0

@juanchopanza其實這正是我現在的想法......因爲我們超出界限,但是我們有連續的存儲空間。 – vsoftco

+0

有這樣的:http://stackoverflow.com/questions/7269099/may-i-treat-a-2d-array-as-a-contiguous-1d-array – juanchopanza

0

因爲數組auxMat是在內存中連續的,你可以直接從內存複製到您的載體。在這裏,你說的是矢量構造使用指針運算從auxMat開始複製,直到結束內存:

std::vector<int> collectionSum(auxMat, auxMat + (gray.rows * gray.cols)); 

編輯:

對不起,我看了你的問題,作爲一維數組(INT *)而不是2D(int **)數組。我誠實地建議切換到一維數組,因爲通常它更快,更容易處理。根據是否您使用行優先的順序或列優先順序,就可以訪問你想要的元素:

elem = y * width + x; // for row-first order 
elem = x * height + y; // for column-first order 

例如:你有

// Create a 3x3 matrix but represent it continuously as a 1D array 
const int A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; 
const unsigned width = 3; 
const unsigned height = 3; 
for (int y = 0; y < height; ++y) 
{ 
    for (int x = 0; x < width; ++x) 
    { 
     printf("%d ", A[y * width + x]); 
    } 
    printf("\n"); 
} 
+0

哎呀抱歉,我將auxMat閱讀爲一維數組 – Dawud