【问题标题】:How to get max/min element from a boost multiarray如何从提升多数组中获取最大/最小元素
【发布时间】:2013-06-16 23:07:51
【问题描述】:

我想知道一种简单的方法来查找 boost 多数组的最大/最小元素,一个具有 3 个索引的对象,如下所示:

int iDepth=10,iWidth=10,iHeight=10;
boost::multi_array<GLfloat, 3> image(boost::extents[iDepth][iWidth][iHeight]);

【问题讨论】:

  • std::min_elementstd::max_element 应该可以解决问题。
  • 是的,但我不明白传递给这个 STL 函数的迭代器的形式。

标签: c++ boost boost-multi-array


【解决方案1】:

这应该有效:

std::max_element( image.origin(), image.origin() + image.num_elements());

【讨论】:

  • 这对于不是从 [0][0]... 开始的数组是不正确的。看我的回答。
【解决方案2】:

使用成员data() 更正确,因为:

  1. 确保image 实际上是一个连续的(紧凑数组)。
  2. 从数组的开头开始扫描,即使第一个元素不是[0][0]...。 (origin() 表示 [0][0]... 的地址,即使数组“开始”在不同的点,例如 [1][1]...
std::max_element( image.data(), image.data() + image.num_elements());

【讨论】:

    【解决方案3】:

    您是否尝试过类似的方法:

    std::max_element( image.begin(), image.end());
    

    【讨论】:

    • 我应该期望这个函数的返回类型与这样的迭代器作为输入?
    • 检查文档,例如从这里:cplusplus.com/reference/algorithm/max_element
    • 迭代器返回下一个较低维度的 multi_array,这显然不是 OP 想要的最大值。
    猜你喜欢
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 2019-04-04
    • 2015-10-13
    相关资源
    最近更新 更多