gpt4 book ai didi

c++ - 以步幅获取 std::vector 的最大元素

转载 作者:搜寻专家 更新时间:2023-10-31 01:08:44 25 4
gpt4 key购买 nike

我有一个 std::vector<float>具有以下数据布局

x1 | y1 | z1 | x2 | y2 | z2 | .... | xn | yn | zn

我正在尝试找出一种类似 STL 的方法来获得最大值 x元素以及 yz

显而易见

double xyzmax = *std::max_element(myvector.begin(),myvector.end() );

选择绝对最大值并且不允许我指定步幅。有没有没有 for 循环的技巧?

最佳答案

您可以使用 Boost.Iterator图书馆和 boost::iterator_facade创建一个可以用 std::vector<float>::iterator 初始化的 strided iterator为此 ++itit += 3;在底层迭代器上。

给定这样一个 StrideIt 类型的迭代器, 你可以写

maxX = *std::max_element(StrideIt(v.begin() + 0), StrideIt(v.end() - 2));
maxY = *std::max_element(StrideIt(v.begin() + 1), StrideIt(v.end() - 1));
maxZ = *std::max_element(StrideIt(v.begin() + 2), StrideIt(v.end() - 0));

这最好是重新定义算法,因为算法比迭代器类型多得多。

如果你想要最大的灵 active ,你可以制作StrideIt采用类型(在您的情况下为 float)的类模板和定义步幅的运行时构造函数参数(在您的情况下为 3)。

关于c++ - 以步幅获取 std::vector 的最大元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17696619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com