从单个位置向量c ++

时间:2019-05-28 15:06:31

标签: c++ matrix containers eigen

假设我们有一些粒子的位置是3D向量,并且每个粒子的位置向量都使用类型double pos[3];的变量定义存储在代码中

现在假设我们有n个这样的粒子,每个粒子都有自己的double pos[3];,我正在尝试建立一个矩阵(在Eigen中,即MatrixXd mat;),其中每一行都是一个粒子的位置向量,因此它将是n-by-3矩阵。如何有效地将粒子位置映射到这样的矩阵中,而又不会每次都造成较大的开销?我的想象力是,如果我必须按元素分配矩阵,那么这可能是效率最低的方法,换言之,遍历所有粒子的列表,对于每个粒子,取其位置矢量并将其添加到矩阵中。

1 个答案:

答案 0 :(得分:0)

我要做的是将向量存储为Struct

typedef struct
{
    double x, y, z;
} Pos;

然后,我将存储这些Pos结构的向量。

//#include <vector>
std::vector<Pos> posVector;
Pos myPos;
myPos.x = 1.0;
myPos.y = 3.2;
myPos.z = 4.0;
posVector.push_back(myPos);

我认为这不会有太多开销,但是如果您真的担心,可以将其设置为指向Pos对象的指针的向量,或者如果您知道posVector中将有多少个Pos对象,则可以像这样去非STL:

Pos posArray[2] = {};
Pos myPos1, myPos2;
myPos1.x = 1.0;
myPos1.y = 3.2;
myPos1.z = 4.0;
myPos2.x = 2.3;
myPos2.y = 1.2;
myPos2.z = 5.6;
posArray[0] = myPos1;
posArray[1] = myPos2;