我有一个浮点数的一维向量,我刚从文件中读入。
std::vector<float> result(s.size() / sizeof(float));
我想像这样使用这个数据
myTable[rl][gl][bl][0];
那么有没有简单的方法将我的1D向量转换为简单的多维向量或多维数组?
float myTable[100][10][20][30];
vector<vector<vector<vector<int> >>> myTable;
我仍然可以轻松使用遍布代码设置的索引。 和不必须将其转换为1D访问,如:myTable [indexmathhere]
答案 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()
重载,但是您需要三种代理类型才能获得四个索引尺寸。
答案 1 :(得分:0)
如果你有固定大小的数组,你可能应该使用std :: array。 这个问题就像这样:Multidimensional std::array 不幸的是,没有将数据放入此数组的oneliner,您需要手动执行此操作。