2012-06-23 16 views
2

我想去一個for循環槽的列表,做這樣的事情:C++使用「 - 」操作數連同list.back()

list<my_object> my_list; 

for(int x = 0; x < my_list.size(); x++){ 

    my_object tempObject = (my_list.back() - x); 

    //more actions... 

} 

但是,即使http://www.cplusplus.com/reference/stl/list/back/節目,例如當你使用「 - 」運算符與「back()」函數,Visual C++告訴我「沒有運算符」 - 「匹配這些操作數」...

幾天前我啓動了C++,哪裏可以從這裏出發......這種方式甚至有可能通過這個清單?

+0

http://programmers.stackexchange.com/questions/88241/whats-wrong-with-cplusplus-com – Griwes

+1

因爲'list'包含'int's和'int',所以鏈接到的示例工作正常支持減法。你的列表包含'my_object's,所以除非'my_object'支持「減法」,否則這將不能編譯。 –

+1

'back()-x'部分是否應該向後遍歷列表?它實際上做的是從列表後面的值中減去'x',所以真的不清楚你真的想要代碼做什麼。 – jalf

回答

1

適當的方式,通過列表迭代是使用迭代器:

list<my_object> my_list; 

for (list<my_object>::iterator i(my_list.begin()), end(my_list.end()); i!=end; ++i) { 
    my_object tempObject = *i; 

    //more actions... 

} 

使用與C++ 11的迭代器:

for (auto i = begin(my_list), end = end(my_list); i!=end(); ++i) { 
    my_object tempObject = *i; 

    //more actions... 

} 

可以使用基於對C++ 11的範圍循環:

for (my_object tempObject : my_list) { 

    //more actions... 

} 

或者如果碰巧有一個STL樣式算法模板已經做了更多的動作「:

more_actions(begin(my_list),end(my_list)); 
+0

您正在使用可變迭代器,但是然後創建* i的副本? –

+0

原始代碼進行復制。我不會推薦它,但這超出了問題的範圍。我也不認爲這是使用常量迭代器的原因。 – bames53

1

在您鏈接到列表裏面的元素的例子是int這就是爲什麼它在那裏工作。你要做的是從my_object的實例中減去一個整數。沒有內置的功能來執行此操作,但如果有功能operator-(my_object &lhs, int rhs)那麼它可能是可能的。