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