C++ 特征值c+中的逗号初始化问题+;

C++ 特征值c+中的逗号初始化问题+;,c++,initialization,comma,eigen,C++,Initialization,Comma,Eigen,我有一个问题,在Eigen教程中指出的逗号初始化似乎不起作用 我有一个系统,其中我有一个向量初始化的主要部分: 主要内容: 和一个函数: double useVector(VectorXd &v) { dataI = model_.find(); v << model_[dataI].v[0], model_[dataI].v[1], model_[dataI].v[2], 1; return dataI; } 现在,model_[dataI].v是

我有一个问题,在Eigen教程中指出的逗号初始化似乎不起作用

我有一个系统,其中我有一个向量初始化的主要部分:

主要内容:

和一个函数:

double useVector(VectorXd &v) {
    dataI = model_.find();
    v << model_[dataI].v[0], model_[dataI].v[1], model_[dataI].v[2], 1;
    return dataI;
}
现在,
model_[dataI].v
是一个
double[3]
并且它确实在工作。我的理解是,这与此相同:

VectorXd v;
v << 1, 2, 3,
     4, 5, 6,
     7, 8, 9;
只要v是这样初始化的:

double distance = useVector(v);
VectorXd v(4);
这立刻让我想知道调整大小的意义(但如果我把它拿走,它会再次出现故障)


有人知道为什么会发生这种情况吗?

是的,在使用逗号初始值设定项之前,必须将向量v调整到适当的大小。

如果必须手动调整向量的大小,那么使用
VectorXd
有什么意义?我认为艾根应该能处理这件事。原因有两个。首先,我们不区分
VectorXd
MatrixXd
(两者都是
matrixd
),对于后者,我们必须知道适当布局给定条目的大小。其次,这允许在目标
VectorXd
中直接插入元素,而无需始终重新定位。
v.resize(4)
v[0] = model_[dataI].v[0];
v[1] = model_[dataI].v[1];
v[2] = model_[dataI].v[2];
v[3] = 1;
VectorXd v(4);