首页 > 解决方案 > 避免复制重复使用的特征块

问题描述

是否可以不在下面的第 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++eigeneigen3

解决方案


使用 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没有初始化(我假设只是为了保持示例简短)。


推荐阅读