C++ 从特征点获取最大x、最大y、最大z

C++ 从特征点获取最大x、最大y、最大z,c++,C++,我有一个std::vector featurePointsOgre::Vector3有x、y、z浮动成员 我想得到最大x,最小x,最大y,最小y,最大z和最小z 我尝试了以下方法: float maxX = std::max_element(featurePoints.begin(), featurePoints.end(), [](Ogre::Vector3 a, Ogre::Vector3 b){return a.x < b.x

我有一个
std::vector featurePoints
Ogre::Vector3
有x、y、z
浮动成员

我想得到最大x,最小x,最大y,最小y,最大z和最小z

我尝试了以下方法:

float maxX = std::max_element(featurePoints.begin(), featurePoints.end(),
                             [](Ogre::Vector3 a, Ogre::Vector3 b){return a.x < b.x;});
auto maxx = std::max_element(featurePoints.begin(), featurePoints.end(),
                             [](Ogre::Vector3 a, Ogre::Vector3 b){return a.x < b.x;});
auto maxy = std::max_element(featurePoints.begin(), featurePoints.end(),
                             [](Ogre::Vector3 a, Ogre::Vector3 b){return a.y < b.y;});
auto maxz = std::max_element(featurePoints.begin(), featurePoints.end(),
                             [](Ogre::Vector3 a, Ogre::Vector3 b){return a.z < b.z;});
auto minx = std::max_element(featurePoints.begin(), featurePoints.end(),
                             [](Ogre::Vector3 a, Ogre::Vector3 b){return a.x > b.x;});
auto miny = std::max_element(featurePoints.begin(), featurePoints.end(),
                             [](Ogre::Vector3 a, Ogre::Vector3 b){return a.y > b.y;});
auto minz = std::max_element(featurePoints.begin(), featurePoints.end(),
                             [](Ogre::Vector3 a, Ogre::Vector3 b){return a.z > b.z;});
float maxX=std::max_元素(featurePoints.begin(),featurePoints.end(),
[](Ogre::Vector3A,Ogre::Vector3B){返回a.xb.x;});
auto miny=std::max_元素(featurePoints.begin(),featurePoints.end(),
[](Ogre::Vector3A,Ogre::Vector3B){返回a.y>b.y;});
auto minz=std::max_元素(featurePoints.begin(),featurePoints.end(),
[](Ogre::Vector3A,Ogre::Vector3B){返回a.z>b.z;});
这将导致此编译器错误:


没有从“标准::\u 1::\u包装\u iter”到“float”的可行转换


如何修复它?

std::max\u element
向容器返回一个迭代器,因此您可以分配它,然后取消引用以获取元素

auto itMax = std::max_element(featurePoints.begin(), featurePoints.end(), [](Ogre::Vector3 a, Ogre::Vector3 b){return a.x < b.x;});
float maxX = itMax->x;
auto itMax=std::max_元素(featurePoints.begin(),featurePoints.end(),[](Ogre::Vector3 a,Ogre::Vector3 b){返回a.xx;
或者直接取消引用

float maxX = std::max_element(featurePoints.begin(),
                              featurePoints.end(),
                              [](Ogre::Vector3 a, Ogre::Vector3 b){return a.x < b.x;})->x;
float minX = std::min_element(featurePoints.begin(),
                              featurePoints.end(),
                              [](Ogre::Vector3 a, Ogre::Vector3 b){return a.x < b.x;})->x;
float maxX=std::max_元素(featurePoints.begin(),
featurePoints.end(),
[](Ogre::Vector3A,Ogre::Vector3B){返回a.xx;
float minX=std::min_元素(featurePoints.begin(),
featurePoints.end(),
[](Ogre::Vector3A,Ogre::Vector3B){返回a.xx;

std::max_element
将迭代器返回到容器中,因此您可以分配迭代器,然后取消引用以获取元素

auto itMax = std::max_element(featurePoints.begin(), featurePoints.end(), [](Ogre::Vector3 a, Ogre::Vector3 b){return a.x < b.x;});
float maxX = itMax->x;
auto itMax=std::max_元素(featurePoints.begin(),featurePoints.end(),[](Ogre::Vector3 a,Ogre::Vector3 b){返回a.xx;
或者直接取消引用

float maxX = std::max_element(featurePoints.begin(),
                              featurePoints.end(),
                              [](Ogre::Vector3 a, Ogre::Vector3 b){return a.x < b.x;})->x;
float minX = std::min_element(featurePoints.begin(),
                              featurePoints.end(),
                              [](Ogre::Vector3 a, Ogre::Vector3 b){return a.x < b.x;})->x;
float maxX=std::max_元素(featurePoints.begin(),
featurePoints.end(),
[](Ogre::Vector3A,Ogre::Vector3B){返回a.xx;
float minX=std::min_元素(featurePoints.begin(),
featurePoints.end(),
[](Ogre::Vector3A,Ogre::Vector3B){返回a.xx;

std::max_元素的返回值是容器中元素的迭代器,而不是元素本身。因此,编译器在尝试将结果分配给
float
时会发出诊断

但是有一个更好的函数:
std::minmax_element
,它允许您在一次遍历中获得最小值和最大值:

auto pair = std::minmax_element(
    featurePoints.begin(),
    featurePoints.end(),
    [](Ogre::Vector3 a, Ogre::Vector3 b){return a.x < b.x;}
);
float minX = pair.first->x;
float maxX = pair.second->x;
auto-pair=std::minmax\u元素(
featurePoints.begin(),
featurePoints.end(),
[](Ogre::Vector3A,Ogre::Vector3B){返回a.xx;
float maxX=pair.second->x;
这里,
pair
是两个迭代器的
std::pair
,第一个迭代器最小,第二个迭代器最大


引用:

std::max_元素的返回值是容器中元素的迭代器,而不是元素本身。因此,编译器在尝试将结果分配给
float
时会发出诊断

但是有一个更好的函数:
std::minmax_element
,它允许您在一次遍历中获得最小值和最大值:

auto pair = std::minmax_element(
    featurePoints.begin(),
    featurePoints.end(),
    [](Ogre::Vector3 a, Ogre::Vector3 b){return a.x < b.x;}
);
float minX = pair.first->x;
float maxX = pair.second->x;
auto-pair=std::minmax\u元素(
featurePoints.begin(),
featurePoints.end(),
[](Ogre::Vector3A,Ogre::Vector3B){返回a.xx;
float maxX=pair.second->x;
这里,
pair
是两个迭代器的
std::pair
,第一个迭代器最小,第二个迭代器最大


参考资料:

请提供有关错误的详细信息。无法将“std::\u 1::\u wrap\u iter”转换为“float”,请提供有关错误的详细信息。无法将“std::\u 1::\u wrap\u iter”转换为“float”,谢谢。你能看看我的编辑帖子吗,计算minx,miny,minz,maxx,maxy,maxzy正确吗?你应该适当地使用
max_元素
min_元素
,但这两个元素都需要
谢谢。你能看看我的编辑贴子吗,计算minx,miny,minz,maxx,maxy,maxzy正确吗?你应该适当地使用
max_元素
min_元素
,但两者都取