c++ - 避免复制重复使用的特征块
问题描述
是否可以不在下面的第 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
请注意,在您的示例中,两者values
都all_bounds
没有初始化(我假设只是为了保持示例简短)。
推荐阅读
- java - 如何在底部导航视图中的每个项目名称下方添加行(视图)?
- python - 用前一个列名填写空标题 - pandas
- maven - 传递依赖如何用于二级依赖
- cakephp - 为一个客户保存多个实体
- entity-framework-6 - EF6 模型浏览器不显示任何内容
- php - WooCommerce 为重新计算按钮添加订单管理挂钩
- elixir - Elixir / Phoenix:为什么路由助手需要@conn?
- python - 如何抑制pyinstaller生成的可执行文件窗口中的所有警告
- linq - LINQ 识别连续出现中第一个满足条件的行
- postgresql - PSQL 套接字超时:连接超时错误