【发布时间】:2016-07-01 20:23:42
【问题描述】:
C++标准库中的reverse算法等价于
template <class BidirectionalIterator>
void reverse (BidirectionalIterator first, BidirectionalIterator last)
{
while ((first!=last)&&(first!=--last)) {
std::iter_swap (first,last);
++first;
}
}
根据http://www.cplusplus.com/reference/algorithm/reverse/。我想用 C# 编写等效的代码:
public void Reverse<T> ( T first, T last )
{
// ...
}
首先,你如何传递两个对IEnumerators 的引用,而第二个是可以向后移动的?有没有一种自然的方法可以做到这一点,还是需要先扩展IEnumerable<T>?
其次,如果上一个问题的答案是否定的,那么是否有一种 Skeet 认证的 C# 编写方式 reverse 在通用性和效率方面与 C++ 相同?如果有,是什么?
【问题讨论】:
-
也许这个thread 和@Brian Murphy-Booth 的回答对你有帮助。为了回答您的问题,C# 没有双向迭代器
-
当你在 C++ 中迭代时,你有一个第一个和一个最后一个。在 C# 中,这个概念不存在。您完全迭代集合...
-
还有一个LINQ
Enumerable.Reverse