2014-01-08 109 views
1

我有一個一維矢量我剛剛從文件中讀取的浮點數。一維矢量到多維數組/矢量

std::vector<float> result(s.size()/sizeof(float)); 

我想用這個數據是這樣

myTable[rl][gl][bl][0]; 

那麼,有沒有簡單的方法來我的一維向量轉換爲一個多維向量或多維數組是簡單?

float myTable[100][10][20][30]; 
vector<vector<vector<vector<int> >>> myTable; 

在哪裏我仍然可以很容易地使用在代碼中設置的索引。 和不是必須將其轉換爲一維訪問,如:myTable [indexmathhere]

回答

0

如果你有固定大小的數組,你可能應該使用std :: array。 類似於這個問題:Multidimensional std::array 不幸的是,沒有oneliner把你的數據放到這個數組中,你需要手動完成。

+0

你沒有回答這個問題。 –

+0

我做到了。問題是:「那麼有沒有簡單的方法可以將我的一維向量轉換爲簡單的多維向量或多維數組?」我應該爲他寫代碼嗎?我對此不感興趣,謝謝。代碼是微不足道的順便說一句。 –

+0

我從來沒有要求你爲他寫代碼。我說的是,回答這個問題,而不是「改變一個不同的容器」,這完全是重點。 –

1

我不會重寫數據,除非您有緩存要求(儘管我們對數據佈局一無所知)。

將該矢量存儲在一個類中,然後編寫一個存取函數,該函數需要四個索引參數並執行必要的算術運算以將其平鋪到單個向量索引中。

class MyMatrix 
{ 
    std::vector<float> result; 

public: 
    float at(int r, int g, int b, int a) const 
    { 
     return result[r+W*g+W*H*b+W*H*D*a]; // or whatevs 
    } 
}; 

你甚至可以寫一些operator()重載,但你需要三個代理類型以獲取索引的四個維度出這一點。