为什么像std::sort()这样的函数会直接改变向量而不是返回值?

我是 C++ 的新手,想知道为什么std::sort()直接更改数组。我自然会认为sort()函数应该是这样的:

anyVector = sort(anyVector.begin(), anyVector.end());

我的问题是:std::sort()如果您不提及要重新分配的数组本身,如何理解它必须更改数组内容的顺序?

我知道它可能看起来像一个微不足道的问题,但我没有找到任何解释(也许是因为这对许多人来说很明显)。

回答

std::sort不知道容器的算法。您传递迭代器,算法适用于迭代器。因此std::sort无法返回向量。

更亵渎的原因是你总是必须在就地做某事或创建副本之间做出选择。当算法就地完成其工作时,您仍然可以自由复制:

std::vector<int> my_sort(const std::vector<int>& v) {
      auto result = v; // passing v by value and returning it defeats NRVO
      std::sort(result.begin(), result.end());
      return result;
}

但反过来是不可能的。如果算法会复制,你就不能轻易地把它变成不复制的东西。


以上是为什么像std::sort()这样的函数会直接改变向量而不是返回值?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>