【问题标题】:1D Vector to Multi-dimensional array / Vector一维向量到多维数组/向量
【发布时间】:2014-01-08 14:43:35
【问题描述】:

我有一个刚从文件中读取的浮点数的一维向量。

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]

【问题讨论】:

    标签: c++ arrays vector multidimensional-array


    【解决方案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() 重载,但您需要三个代理类型才能从中获得四个维度的索引。

    【讨论】:

      【解决方案2】:

      如果你有固定大小的数组,你可能应该使用 std::array。 在这个问题中有类似的东西:Multidimensional std::array 不幸的是,没有oneliner可以将您的数据放入这个数组中,您需要手动完成。

      【讨论】:

      • 你没有回答问题。
      • 我做到了。问题是:“那么有什么简单的方法可以将我的一维向量转换为简单的多维向量或多维数组吗?”不,我应该为他写代码吗?我对此不感兴趣,谢谢。顺便说一句,代码很简单。
      • 我从来没有要求你为他写代码。我的意思是,回答问题而不是“更改为不同的容器”,这完全无关紧要。
      • 好的。点接受。 std::array 允许避免例如 push_back 的诱惑,这会导致内存重新分配。对于桌面系统上的这种大小的数组,std::array 将是我的首选。你的解决方案对我来说很好,但也不是 TS 要求的。
      猜你喜欢
      • 1970-01-01
      • 2011-09-03
      • 2017-04-19
      • 2023-03-30
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      相关资源
      最近更新 更多