避免复制重复使用的特征块

  • 本文关键字:特征 复制 c++ eigen eigen3
  • 更新时间 :
  • 英文 :


是否可以不复制到下面第3行的bounds中?

Eigen::VectorXd all_bounds(100);
Eigen::VectorXd values(10);
Eigen::VectorXd bounds = all_bounds.segment(20, 10);
values = values.cwiseMin(bounds);
values = values.cwiseMax(-bounds);

我可以想到的一种方法是将bounds.segment(20, 10)内联到cwise{Min,Max}()调用中,但它在cwise{Min,Max}调用之间重复代码,并且当获取边界的表达式比上面的玩具示例更长时,它会变得丑陋。

使用C++11,您只需编写

auto bounds = all_bounds.segment(20, 10);

否则,或者如果你想避免(与Eigen结合使用(潜在危险的auto关键字,你可以写

Eigen::Ref<Eigen::VectorXd> bounds = all_bounds.segment(20, 10);

如果all_bounds是只读的,请改用Eigen::Ref<const Eigen::VectorXd>

Godbolt链接:https://godbolt.org/z/OzY759


请注意,在您的示例中,valuesall_bounds都没有初始化(我假设只是为了使示例简洁(。

相关内容

  • 没有找到相关文章

最新更新