为什么像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;
}
但反过来是不可能的。如果算法会复制,你就不能轻易地把它变成不复制的东西。