如何以相反的顺序遍历C#LinkedList 我如何用C++的代码来做下面的C++代码段? std::list<MyClass*>::reverse_iterator itr(it); for(; itr != MyList.rend(); ++itr) std::list::reverse\u迭代器itr(it); 对于(;itr!=MyList.rend();++itr)
作为1-off,类似于:如何以相反的顺序遍历C#LinkedList 我如何用C++的代码来做下面的C++代码段? std::list<MyClass*>::reverse_iterator itr(it); for(; itr != MyList.rend(); ++itr) std::list::reverse\u迭代器itr(it); 对于(;itr!=MyList.rend();++itr),c#,C#,作为1-off,类似于: var el = list.Last; while (el != null) { // use el.Value el = el.Previous; } 如果您经常这样做,可以使用类似的迭代器块来生成所有值: public static IEnumerable<T> Reverse<T>(this LinkedList<T> list) { var el = list.Last; while (el
var el = list.Last;
while (el != null) {
// use el.Value
el = el.Previous;
}
如果您经常这样做,可以使用类似的迭代器块来生成所有值:
public static IEnumerable<T> Reverse<T>(this LinkedList<T> list) {
var el = list.Last;
while (el != null) {
yield return el.Value;
el = el.Previous;
}
}
我认为值得注意的是,
LinkedList
是IEnumerable
,因此如果使用Linq,它会选择IEnumerable.Reverse()
。这对于真正的短名单可能就足够了。对于较长的列表,此答案中的方法将更有效。@Matthewstrobbridge如果通过“使用”两种方法都可用,那么哪一种方法优先?更具体的一个?@EugenDück是的,更具体的一个(即对于LinkedList
)将优先。但是如果免费获得的IEnumerable
版本的性能足够,那么您根本不需要实现另一个版本。
foreach(var val in list.Reverse()) {
// use val
}