我将实现一个列表类,并希望迭代整个列表。
这是适当的C ++来做类似的事情:
for (auto i : *this)
如果没有,基于范围的for循环的正确语法是什么?
答案 0 :(得分:0)
您的列表类需要具有合适的begin()
和end()
成员函数,否则必须使用具有这些名称的合适的自由函数。例如,请参阅here。
this
没有什么特别之处。如果您的列表类为L
且l
的类型为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