2

我想通过 for 循环中的列表并执行以下操作:

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++,但我不知道从这里去哪里.. 甚至有可能以这种方式通过列表吗?

4

2 回答 2

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 循环:

for (my_object tempObject : my_list) {

   //more actions...

}

或者,如果碰巧有一个 STL 风格的算法模板已经执行了您的“更多操作”:

more_actions(begin(my_list),end(my_list));
于 2012-06-23T23:08:11.610 回答
1

在示例中,您链接到列表中的元素是一个int,这就是它在那里工作的原因。您要做的是从my_object. 没有内置函数来执行此操作,但如果有一个函数operator-(my_object &lhs, int rhs),那么它是可能的。

于 2012-06-24T04:10:59.623 回答