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_元素
,但两者都取