将 return 变量写入外部数据

Write return variable to external data

假设我有

size_t n = 100;
Eigen::MatrixXd A(n, n);
std::vector<double> x(n);
std::vector<double> b(n);

Eigen::VectorXd B = A * Eigen::Map<const Eigen::VectorXd>(x.data(), n);
std::copy(B.data(), B.data() + n, b.begin());

我的问题是:我可以直接写入 'external' b 的内存吗?

Eigen::Map 带有 non-const 模板参数是可写的,所以你可以简单地写:

Eigen::Map<Eigen::VectorXd>(b.data(), b.size()).noalias()
      = A * Eigen::Map<const Eigen::VectorXd>(x.data(), n);

.noalias() 很重要,它告诉 Eigen left-hand-side 不会对 right-hand-side 的任何部分进行别名(否则,它会首先评估为临时值,产生几乎相同的指令到你的原始代码)。