首页 > 解决方案 > 有没有办法在多维向量中切换维度顺序?

问题描述

我有一个 3D 矢量,我希望能够选择要绘制的维度作为另一个维度的函数。

到目前为止,我是手动完成的:我创建了第二个 3D 矢量并相应地重新组织数据。这个解决方案不是很实用,因为我每次想要切换维度时都需要切换索引(在嵌套循环内)......

有更好/更清洁的解决方案吗?

谢谢。

标签: c++vectormultidimensional-arraydimensions

解决方案


C++ 不提供多维容器的原因与容器等std::vector不提供标准operator+ 的原因相同:没有适合每个人需求的标准(在+运算符的情况下,这可能是连接、元素相加、增加维度, 谁知道)。如果你上课而不是矢量

<template typename T>
class volume {

private:
std::vector<T>       data;    // e.g. 3x2 array { 0, 1, 2, 3, 4, 5 }
std::vector<size_t>  sizes;   // e.g. 3x2 array { 3, 2 }
std::vector<size_t>  strides; // e.g. 3x2 array { 1, 3 }

};

那么您就拥有了您想要的所有灵活性 - 无需停留在 3D 上!

例如,data3x2 数组的向量可以是前 6 个自然数,sizes向量可以是{ 3, 2 }strides 数组{ 1, 3 }:在一行(其中有 2 个)中,元素彼此相邻,以增加您需要的行向前移动 3 个位置。

在一般的n维情况下,您可以创建一个at()将向量(或initializer_list)作为位置参数的运算符,对应于该位置的偏移量是其与 的内积strides

如果你不想从头开始编程,那么像Blitz++这样的库已经提供了这个功能。


推荐阅读