0

我有一个 point3 结构,它需要 3 个浮点数 x、y、z(3-D 空间坐标)。

我正在尝试编写一个函数来转换点列表中每个元素的 x、y、z 值。

我是 C++ 新手,所以我认为我没有正确编写迭代器,任何人都可以帮助澄清如何迭代列表并修改列表中每个元素的组件吗?

我看了这篇文章C++ How to loop through a list of structs and access their properties并认为这回答了我的问题,但解决方案不起作用。

这是我的代码:

//Translates the face by dx, dy, dz coordinates
list<point3> translateFace(list<point3> lop, float dx, float dy, float dz)
{
    list<point3>::iterator iter;

    for (iter = lop.begin() ; iter != lop.end(); iter++){
        iter->x - dx;
        iter->y - dy;
        iter->z - dz;
    }
   return lop;
}

我也尝试了上面链接中建议的解决方案,仍然没有用。return lop应该在 for 循环内部还是外部?我应该退回除 lop 以外的东西吗?

for (iter = lop.begin() ; iter != lop.end(); iter++){
    (*iter).x - dx;
    (*iter).y - dy;
    (*iter).z - dz;
    }
return lop;
4

2 回答 2

2

在我看来,您实际上并没有存储计算结果:

for (iter = lop.begin() ; iter != lop.end(); iter++){
    iter->x - dx;
    iter->y - dy;
    iter->z - dz;
}

试试这个:

for (iter = lop.begin() ; iter != lop.end(); iter++){
    iter->x -= dx;
    iter->y -= dy;
    iter->z -= dz;
}

我希望大多数编译器会就这样的未使用计算发出警告——如果可以的话,提高编译器的警告级别。

于 2012-04-18T02:30:07.243 回答
1

让我们来看看:

list<point3> translateFace(list<point3> lop, float dx, float dy, float dz)
{
    list<point3>::iterator iter;

    for (iter = lop.begin() ; iter != lop.end(); iter++){
        (*iter).x -= dx;
        (*iter).y -= dy;
        (*iter).z -= dz;
    }

    return lop;
}

应该是正确的选项,假设您知道这样做时,您正在创建 lop 参数的本地副本,然后将其返回并移动 (C++0x) 或复制 (C++03) 到任何变量中您将其设置为。例如(假设 point3 需要 3 个浮点数来构造):

point3 point(0.0, 0.3, 0.5);
list<point3> face;

face = translateFace(list<point3>(point), -0.5, -3.32, -7.5);

应该导致 face 包含一个仅包含点的列表,坐标为 -.5、-3.02 和 -7.0。

于 2012-04-18T02:39:51.307 回答