Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
像std::sort()这样的函数直接更改向量而不是返回值的原因是什么? 我是一个C++初学者,我想知道为什么 STD::SoTo()/Cuff>直接改变数组。我自然会认为sort()函数应该是这样的: anyVector = sort(anyVector.begin(), anyVector.end());_C++ - Fatal编程技术网

像std::sort()这样的函数直接更改向量而不是返回值的原因是什么? 我是一个C++初学者,我想知道为什么 STD::SoTo()/Cuff>直接改变数组。我自然会认为sort()函数应该是这样的: anyVector = sort(anyVector.begin(), anyVector.end());

像std::sort()这样的函数直接更改向量而不是返回值的原因是什么? 我是一个C++初学者,我想知道为什么 STD::SoTo()/Cuff>直接改变数组。我自然会认为sort()函数应该是这样的: anyVector = sort(anyVector.begin(), anyVector.end());,c++,C++,我的问题是:std::sort()如何理解如果不提及要重新分配的数组本身,它必须更改数组内容的顺序 我知道这可能看起来是一个微不足道的问题,但我没有找到任何解释(可能是因为这对许多人来说是显而易见的)。像std::sort这样的算法不知道容器。你传递迭代器,算法在迭代器上运行。因此,std::sort无法返回向量 更亵渎的原因是,你总是要在原地做某事或创建副本之间做出选择。当算法完成其工作时,您仍然可以自由复制: std::vector<int> my_sort(const std:

我的问题是:
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::vector我的排序(const std::vector&v){
auto result=v;//通过值传递v并返回它会破坏NRVO
排序(result.begin(),result.end());
返回结果;
}

但反过来是不可能的。如果该算法将生成一个副本,则无法轻松地将其转换为不生成副本的内容。

进行适当的排序。
std::sort()
对一个范围进行排序,该范围由一对迭代器提供,第一个迭代器用于序列的开头,第二个迭代器位于最后一个迭代器之后。传递整个
vector
只是使用的一种变体。我只需要“in-place”关键字谢谢,现在我阅读了“passby-reference”的含义,我用指针刷新了我的旧C概念,现在清楚了为什么排序使用引用并直接修改值。非常感谢@Eljay!不客气。:-)“我自然会这样想……”我也自然会这样想,因为没有那么多惊喜(引用透明性、不变性……这在函数式编程阵营中更为常见)。随著可变性的出现,内存占用会更小,这在许多非常常见的情况下都是至关重要的,并提供了一些保证。我只希望名字是
std::sort\u in\u place
。唉,那艘船已经开航了。你的例子可能需要调整一下,因为NRVO不能被利用,因为
v
是一个函数参数。它需要一个不必要的值副本。@Bathsheba移动到某个局部向量中,然后返回该向量?或通过常量引用传递并创建一个副本inside@Bathsheba我觉得整个拷贝省略的事情有点烦人,因为很多东西都变了,我不完全理解,恐怕很快就没有人会完全理解那里发生了什么。