基于范围的循环用于类的成员函数?

时间:2016-12-18 02:31:48

标签: c++

我将实现一个列表类,并希望迭代整个列表。

这是适当的C ++来做类似的事情:

for (auto i : *this)

如果没有,基于范围的for循环的正确语法是什么?

3 个答案:

答案 0 :(得分:0)

您的列表类需要具有合适的begin()end()成员函数,否则必须使用具有这些名称的合适的自由函数。例如,请参阅here

this没有什么特别之处。如果您的列表类为Ll的类型为L,那么您可以执行以下操作:

for (auto i : l)

答案 1 :(得分:0)

示例

list<T> l{....};

发布C ++ 11

for(auto & elem : l)
    cout<<elem;

通常的方式

for(list<T>::iterator it = l.begin();it!=l.end();++it)
    cout<<*it;

答案 2 :(得分:0)

根据文档,range-for循环定义如下(直到C ++ 17):

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"your.xml");
XmlNamespaceManager ns = new XmlNamespaceManager(xmlDoc.NameTable);
ns.AddNamespace("ns", "http://example");
XmlNode node = xmlDoc.SelectSingleNode("//ns:RATING/ns:AMOUNT", ns);
var result = node.InnerText;

因此,您只需要定义几个函数,即{ auto && __range = range_expression ;  for (auto __begin = begin_expr, __end = end_expr; __begin != __end; ++__begin) {  range_declaration = *__begin;  loop_statement  } } begin。它们既可以是成员函数,也可以通过ADL访问 这样,您就可以在范围内使用您的类型,无论是从类本身(使用end)还是从其他任何地方(通过使用命名变量)。

它遵循一个最小的工作示例:

*this