【问题标题】:Iterating through a list of points in C++遍历 C++ 中的点列表
【发布时间】:2012-04-18 02:26:55
【问题描述】:

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

【问题讨论】:

  • “我是 C++ 新手”如果您是 C++ 新手,图形编程不是从哪里开始的。
  • 我并不是说我是图形编程新手,只是说我是 C++ 新手。
  • 即使你擅长其他语言的图形,它仍然不是开始学习 C++ 的好地方。
  • 一年后没关系,但不要告诉人们“这不是一个好的开始”,你应该把你的精力投入到,哦,我不知道,真正帮助他们。如果您看一下已接受的答案,您会发现我犯了一个小错误,因为我是语言新手。我的问题与图形编程的复杂性无关。

标签: list iterator


【解决方案1】:

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

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;
}

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

【讨论】:

  • 你说得对,非常感谢!我不知道为什么我的编译器什么也没说,但我会调整设置!
【解决方案2】:

让我们看看:

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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 2016-01-04
    相关资源
    最近更新 更多