当前位置: 首页 > 知识库问答 >
问题:

为什么ranges::sort返回迭代器?

赖运珧
2023-03-14

我可以看到std::sort返回void。但是现在ranges已经添加到C++20标准中,为什么std::ranges::sort返回迭代器?cppreference指定:

返回值

等于last的迭代器

  1. 这个选择背后的理性是什么?
  2. void相比,用例的优势是什么?

共有1个答案

卢黎昕
2023-03-14

您不必将结束迭代器传递给std::ranges中的算法。您可以传递一个哨兵,这是一个类似于迭代器的东西,但它本身不是一个迭代器(它不能被取消引用或增量)。想一想,如果您想要向算法传递一个以NULL结尾的字符串,那么这可能是多么有用。

std::range::sort排序时必须找到序列的结尾。这是有用的信息,因此返回。

 类似资料:
  • 我正在阅读有效的java,有一个问题。我不理解为什么流迭代器返回Iterable。据我所知,Iterable包含迭代器接口。但在流api中,即使迭代器没有继承Iterable,这段代码仍在工作。 我对这些代码很困惑。因为迭代器和Iterable之间没有关系,除了Iterable有迭代器。

  • 我想为客户数据结构提供一个视图,它有自己的迭代器。我编写了一个小程序来测试它,如下所示。如果我取消对begin()的注释,它就会工作。但是如果我使用DummyIter,那么我会得到一个编译错误。 在我的完整程序中,我实现了一个完整的迭代器,但为了简单起见,我把它缩小到了必要的函数。 我使用的是GCC 11.1.0。我在迭代器中缺少了什么使其符合范围?

  • 我正在尝试研究java单词计数示例。据我所知,spark RDD是一种特殊类型的集合,而flat map基本上转换一个嵌套的集合(比如Stream>=>Stream),那么为什么下面一行中的spark Java API需要为每一行返回一个迭代器呢?如何在RDD中使用? 函数不是应该在arrays.aslist(line.toString().split(“”))结束吗?

  • 我想知道为什么c标准要求只接受随机访问迭代器?我不认为这有什么好处,因为std::sort和std::list::sort的复杂性都是。将限制为随机访问迭代器(RAI),似乎需要为具有相同复杂性的列表编写单独的函数。 同样的情况也适用于,其中列表的非RAI计数器部分至今仍然缺失。 这种设计是因为历史上人们使用了的变体来实现? 如果在RAI容器上编写排序算法有好处,那么最好使更通用,并让像这样的RA

  • 问题内容: 码: 即使在两种情况下它应返回一个空列表,代码也会输出None: 和 详细信息:该代码用于我为python练习制作的列表排序模块(我在python上相对较新)。是修改后的mergesort。 问题答案: @reut首先了解它,但是 不 另外 应该 如果将两者都设置为[]则都不设置,则意味着a2为[1]且b2都不为您将a2丢掉。我猜这是意外的。 同样在代码中,在较低的sortClass中