2012-04-18 115 views
0

列表我有一个POINT3 struct,用于需要3个浮X,Y,Z(3-d空间中的坐标)。迭代通过点的C++

我试图写在转换点的列表的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; 
+1

“我是新的C++”如果你是新的C++图形编程是不是哪里开始。 – 2012-04-18 03:17:47

+1

我没有说我是图形编程的新手,只是我是C++的新手。 – Murkantilism 2013-05-21 13:22:47

+0

即使你擅长其他语言的图形,它仍然不是开始学习C++的好地方。 – 2013-05-21 13:32:57

回答

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

我希望大多数编译器会抛出关于这样一个未使用的计算的警告 - 如果可以的话,调高编译器的警告级别。

+0

你是对的,非常感谢!我不知道为什么我的编译器没有说什么,但我会调整设置! – Murkantilism 2012-04-18 02:41:24

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

应导致含有列表保持唯一点,具有坐标-.5,-3.02和-7.0的脸。