迭代C ++中的一系列点

时间:2012-04-18 02:26:56

标签: list iterator

我有一个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;
}

我也试过上面链接中提出的解决方案,仍然没有用。 返回lop 应该在for循环内部还是外部?我应该退回除了垂耳之外的其他东西吗?

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

2 个答案:

答案 0 :(得分: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;
}

我希望大多数编译器都会对这样一个未使用的计算发出警告 - 如果可以,请在编译器上调高警告级别。

答案 1 :(得分: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。