List 在C++;

List 在C++;,list,iterator,List,Iterator,我有一个point3结构,它接受3个浮点x,y,z(三维空间坐标) 我正试图编写一个函数来转换点列表中每个元素的x,y,z值 我是C++新手,所以我不认为我正确地写了迭代器,有人能帮助说明如何迭代列表和修改列表中每个元素的组件吗? 我看了这篇文章,认为这回答了我的问题,但解决方案不起作用 这是我的密码: //Translates the face by dx, dy, dz coordinates list<point3> translateFace(list<point3&g

我有一个point3结构,它接受3个浮点x,y,z(三维空间坐标)

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

我是C++新手,所以我不认为我正确地写了迭代器,有人能帮助说明如何迭代列表和修改列表中每个元素的组件吗? 我看了这篇文章,认为这回答了我的问题,但解决方案不起作用

这是我的密码:

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

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

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

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

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

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;
}
我希望大多数编译器会对这样一个未使用的计算发出警告——如果可以,请在编译器上提高警告级别。

让我们看看:

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、浮点dx、浮点dy、浮点dz)
{
迭代器iter;
对于(iter=lop.begin();iter!=lop.end();iter++){
(*iter).x-=dx;
(*iter).y-=dy;
(*iter).z-=dz;
}
返回lop;
}
应该是正确的选项,假设您知道在执行此操作时,您正在创建lop参数的本地副本,然后将其返回并移动(C++0x)或复制(C++03)到要将其设置为的任何变量中。例如(假设point3需要3个浮点数来构造):

point3点(0.0,0.3,0.5);
列表面;
面=平移(列表(点),-0.5,--3.32,-7.5);
应导致面包含一个仅包含点的列表,坐标为-5、-3.02和-7.0。

让我们看看:

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、浮点dx、浮点dy、浮点dz)
{
迭代器iter;
对于(iter=lop.begin();iter!=lop.end();iter++){
(*iter).x-=dx;
(*iter).y-=dy;
(*iter).z-=dz;
}
返回lop;
}
应该是正确的选项,假设您知道在执行此操作时,您正在创建lop参数的本地副本,然后将其返回并移动(C++0x)或复制(C++03)到要将其设置为的任何变量中。例如(假设point3需要3个浮点数来构造):

point3点(0.0,0.3,0.5);
列表面;
面=平移(列表(点),-0.5,--3.32,-7.5);

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

您是对的,非常感谢!我不知道为什么我的编译器没有说什么,但我会调整设置!你说得对,非常感谢!我不知道为什么我的编译器没有说什么,但我会调整设置!“我是C++新手”,如果你是C++新手,图形编程不是我要开始的地方。我没有说我是图形编程新手,只是我是C++新手。即使你擅长其他语言的图形,它仍然不是学习C++的好地方。不是一年后重要,而是告诉别人。“这不是一个好的开始”,你应该把你的能量传递给我,哦,我不知道,实际上帮助他们。如果你看一看被接受的答案,你会发现我犯了一个小错误,对语言来说是新的。我的问题与图形编程的复杂性无关。“我对C++是新的。如果你是C++新手,图形编程不是我要开始的地方。我没有说我是图形编程新手,只是我对C++是新的。即使你擅长其他语言的图形,它仍然不是学习C++的好地方。不是一年后它很重要,而是告诉人们“这不是一个好的开始”。你应该把精力放在,哦,我不知道,真正帮助他们。如果你看一眼被接受的答案,你会发现我犯了一个小错误,因为我对这门语言还不熟悉。我的问题与图形编程的复杂性无关。