Лучше придерживаться объекта std::vector
. Вот как я обычно имею дело с такими случаями:
std::vector<Vector3d> vecs(n);
auto mat = Matrix3Xd::Map(vecs[0].data(), 3, vecs.size());
Это создает представление о данных, принадлежащих vecs
. Затем поиграйте с mat
, как вам нравится (за исключением изменения размера, конечно!), Например ::
mat = my_affine * mat;
Нет необходимости копировать значения обратно от mat
до vecs
, но, конечно, еслиу вас уже есть Matrix3Xf
или MatrixXf
, и вы хотите скопировать его в vecs
, а затем просто написать:
mat = other_mat;
При условии, что vecs.size() == other_mat.cols()
, в противном случае вам необходимо изменить размер vecs
сначала и заново создайте Map
с новым размером.