【问题标题】:What is the closest way of writing a C++ std::reverse equivalent in C#?在 C# 中编写 C++ std::reverse 等价物的最接近方法是什么?
【发布时间】: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&lt;T&gt;

其次,如果上一个问题的答案是否定的,那么是否有一种 Skeet 认证的 C# 编写方式 reverse 在通用性和效率方面与 C++ 相同?如果有,是什么?

【问题讨论】:

  • 也许这个thread 和@Brian Murphy-Booth 的回答对你有帮助。为了回答您的问题,C# 没有双向迭代器
  • 当你在 C++ 中迭代时,你有一个第一个和一个最后一个。在 C# 中,这个概念不存在。您完全迭代集合...
  • 还有一个LINQ Enumerable.Reverse

标签: c# c++ .net algorithm


【解决方案1】:

List&lt;T&gt; 接口提供了一个Reverse() 方法,它的作用与 C++ equivapent 相同。

看看https://msdn.microsoft.com/en-us/library/b0axc2h2(v=vs.110).aspx

【讨论】:

  • 我认为您的意思是链接this overload。这只是回答了他们问题的效率部分,而不是一般性部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 2013-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多