我不知道opencv,所以可以更简单的解决方案但是......
有几个 lambda 函数的 std::for_each() 怎么样?
std::vector<std::vector<Point3f>> vvp { /* some data */ };
auto mx = vvp[0][0].x;
auto my = vvp[0][0].y;
auto mz = vvp[0][0].z;
std::for_each(vvp.cbegin(), vvp.cend(),
[&](std::vector<Point3f> const & vp)
{ std::for_each(vp.cbegin(), vp.cend(),
[&](Point3f const & p)
{ mx = std::max(mx, p.x);
my = std::max(my, p.y);
mz = std::max(mz, p.z); }); });
如果你可以使用 C++14,所以带有 auto 参数的 lambda 函数,双 std::for_each() 部分可以简单地写成
std::for_each(vvp.cbegin(), vvp.cend(), [&](auto const & vp)
{ std::for_each(vp.cbegin(), vp.cend(), [&](auto const & p)
{ mx = std::max(mx, p.x);
my = std::max(my, p.y);
mz = std::max(mz, p.z); }); });
因此无需显式 Poinf3f 并可供其他类似 point-3d 的类型使用。