2012-04-18 149 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的臉。