2012-10-08 147 views

回答

8

相同的方式,一個std::vector

QVector< QVector<int> > twoDArray;  // Empty. 
QVector< QVector<int> > twoDArray(2); // Contains two int arrays. 
twoDArray[0].resize(4); 
twoDArray[0][2] = 4; // Assign to the third element of the first array. 
... 
etc... 
+0

這是給程序意外完成時,它達到了轉讓聲明 – sai

+0

cmannett85兄弟請一旦檢查它,它導致意外完成 – sai

+0

什麼是?我不知道你寫了什麼。上面的代碼不是連續的塊,它們只是隨機使用的例子! – cmannett85

9

爲了避免嵌套載體可以映射二維索引空間到1D索引空間,至少如果你有一些(常數)「寬度」,這是上限您的x的座標:

int index(int x, int y) { 
    return x + width * y; 
} 

然後使用此索引width * height大小的矢量:

QVector<...> vector(width * height); 
vector[index(5, 3)] = ...; 
+0

你會推薦這種做法嗎?它真的很好看。 – PascalVKooten

+0

將它傳遞給一個函數會強制你將寬度和高度作爲參數? – PascalVKooten

+0

至少寬度(因爲這是在公式中需要索引它)。我建議通過一個方便封裝寬度和高度的'QSize'。當你有C++ 11 lambdas允許更多的靈活性時,另一個選擇是代替vector傳遞一個'std :: function '(其中'Type'是vector應該保存的類型)以'x,y'的形式傳遞索引,並返回您喜歡的* any *數據結構中的引用。然後調用這樣的函數:'doSomething([=](int x,int y){return myData [x * width + y];});'確實看起來很複雜但非常靈活。 – leemes