2016-04-05 11 views
0

eine randomisierte VectorXd in Eigen Zuweisung erfolgt wie folgt:dynamisch zuweisen Zufalls Eigen VectorXd

VectorXd z = VectorXd::Random(10000); 

Ich bin aber nicht sicher, wie die gleiche Vector zuzuteilen dynamisch:

VectorXd* z = new VectorXd::Random(10000); // error: expected type-specifier 

seit VectorXd ist a typedef. Ich anderen Konstruktor Gebrauch kann jedoch zu vermuten, dass ich dies uncessary und ineffizient:

VectorXd* z = new VectorXd(VectorXd::Random(10000)); // compiles 

Antwort

2

Der Eigen::VectorXd einen Behälter ist, der den benötigten Speicher für seinen eigenen Inhalt dynamisch zuteilen wird (die Array von Elementen), so dass alle der folgenden funktioniert:

VectorXd* z1 = new VectorXd(VectorXd::Random(10)); // compiles 
std::cout << "z1:\n" << z1->transpose() << "\n\n"; 

VectorXd* z2 = new VectorXd(); // also compiles 
z2->setRandom(10); 
std::cout << "z2:\n" << z2->transpose() << "\n\n"; 

VectorXd* z3 = new VectorXd(); // compiles as well 
*z3 = VectorXd::Random(10); 
std::cout << "z3:\n" << z3->transpose() << "\n\n"; 

Dies gilt für die meisten der Eigen mit Ausnahme der Größe, deren Objekte in nicht dynamisch (zB Eigen::Vector3d).