我如何使用C ++的算法和迭代器库来实现同一目的?
std::vector<float> transformVectorOfVec3ToVectorofFloats(const std::vector<vector3> & p_vec3Vector)
{
std::vector<float> l_floatVector;
l_floatVector.resize(p_vec3Vector.size());
for(auto m_vec3 : p_vec3Vector)
{
l_floatVector.push_back(m_vec3.x);
l_floatVector.push_back(m_vec3.y);
l_floatVector.push_back(m_vec3.z);
}
}
类似的东西
//std::transform(p_vec3Vector.begin(), p_vec3Vector.end(), l_floatVector.begin(), []()->float); ???
vector3只是一个具有3个float成员变量的类。
您可以使用vector.insert()
和初始化列表来缩短循环:
std::vector<float> transformVectorOfVec3ToVectorofFloats(const std::vector<vector3> & p_vec3Vector) { std::vector<float> l_floatVector; for(auto m_vec3 : p_vec3Vector) l_floatVector.insert(l_floatVector.end(), {m_vec3.x,, m_vec3.y, m_vec3.z}); return l_floatVector; }
您还可以使用
std::accumulate
删除所有手写循环:
std::vector<float> transformVectorOfVec3ToVectorofFloats(const std::vector<vector3> & p_vec3Vector)
{
return std::accumulate(p_vec3Vector.begin(), p_vec3Vector.end(),
std::vector<float>(), []
(std::vector<float>& total, const vector3& v)
{ total.insert(total.end(), {v.x, v.y, v.z}); return total;});
}
std :: for_each是std :: accumulate:]的替代方法
std::for_each(std::begin(p_vec3Vector), std::end(p_vec3Vector),
[&l_floatVector](auto e) {
l_floatVector.insert(std::end(l_floatVector), {e.x, e.y, e.z});
});