返回向量c+上的递归+; 嘿,伙计们,我正在试着把这个JavaScript代码变成C++。我正在做快速排序,除了最后一步,一切都是直截了当的 function quickSort(arr) { //base case if the arr is 1 or 0 then return the array if(arr.length === 1 || arr.length === 0) { return arr; } var pivotIndex = Math.floor(arr.length/2); var pivotValue = arr[pivotIndex]; var before = []; var after = []; for(var counter = 0; counter < arr.length; counter++) { if(counter === pivotIndex) continue; if(pivotValue <= arr[counter]) { before.push(arr[counter]) } else { after.push(arr[counter]) } } //this step I am having trouble rewriting in c++ return quickSort(after).concat(pivotValue).concat(quickSort(before)); } 函数快速排序(arr) { //基本情况如果arr为1或0,则返回数组 如果(arr.length==1 | | arr.length==0) { 返回arr; } var pivotIndex=数学楼层(arr.length/2); var pivotValue=arr[pivotIndex]; 前风险值=[]; var后=[]; 用于(变量计数器=0;计数器,但是,这意味着它不返回任何内容。因此,当您试图返回插入< /C> >的结果时,会得到无效使用空表达式的错误。此外,在C++中,代码> vector。插入< /COD>修改< 向量< /代码>。
是这样,你意识到你的核心问题是“如何连接两个返回向量c+上的递归+; 嘿,伙计们,我正在试着把这个JavaScript代码变成C++。我正在做快速排序,除了最后一步,一切都是直截了当的 function quickSort(arr) { //base case if the arr is 1 or 0 then return the array if(arr.length === 1 || arr.length === 0) { return arr; } var pivotIndex = Math.floor(arr.length/2); var pivotValue = arr[pivotIndex]; var before = []; var after = []; for(var counter = 0; counter < arr.length; counter++) { if(counter === pivotIndex) continue; if(pivotValue <= arr[counter]) { before.push(arr[counter]) } else { after.push(arr[counter]) } } //this step I am having trouble rewriting in c++ return quickSort(after).concat(pivotValue).concat(quickSort(before)); } 函数快速排序(arr) { //基本情况如果arr为1或0,则返回数组 如果(arr.length==1 | | arr.length==0) { 返回arr; } var pivotIndex=数学楼层(arr.length/2); var pivotValue=arr[pivotIndex]; 前风险值=[]; var后=[]; 用于(变量计数器=0;计数器,但是,这意味着它不返回任何内容。因此,当您试图返回插入< /C> >的结果时,会得到无效使用空表达式的错误。此外,在C++中,代码> vector。插入< /COD>修改< 向量< /代码>。,javascript,c++,recursion,vector,Javascript,C++,Recursion,Vector,是这样,你意识到你的核心问题是“如何连接两个向量”s”,然后你找到了一个。现在你的问题是为什么你会得到“一个关于无效使用void表达式的错误”。(这是我的答案至少支持的假设。) 这是因为您可能试图执行以下操作: return quickSort(after).insert( /* stuff */ ); 这是错误的。在JavaScript中,array.concat返回连接的数组。它的返回类型实际上是array,这样做返回arr.concat(arr2)返回一个数组,因为arr.concat将
向量”
s”,然后你找到了一个。现在你的问题是为什么你会得到“一个关于无效使用void表达式的错误”。(这是我的答案至少支持的假设。)
这是因为您可能试图执行以下操作:
return quickSort(after).insert( /* stuff */ );
这是错误的。在JavaScript中,array.concat
返回连接的数组。它的返回类型实际上是array
,这样做返回arr.concat(arr2)
返回一个数组
,因为arr.concat
将返回一个数组
。此外,在JavaScript中,Array.concat
不会修改调用它的数组,而是返回一个新数组
< C++ >,但是,这意味着它不返回任何内容。因此,当您试图返回<代码>插入< /C> >的结果时,会得到无效使用空表达式的错误。此外,在C++中,<>代码> vector。插入< /COD>修改< <代码>向量< /代码>。
那么在这种情况下如何使用insert呢
vector<int> quickSort(vector<int> arr)
{
// ...
// Sort `before` and `after`
before = quickSort(before);
after = quickSort(after);
// Modify `after` and return it.
after.push_back(pivotValue);
after.insert(after.end(), before.begin(), before.end());
return after;
}
矢量快速排序(矢量arr)
{
// ...
//将“before”和“after”排序`
before=快速排序(before);
after=快速排序(after);
//修改'after'并返回它。
之后。向后推_(数据透视值);
after.insert(在.end()之后、在.begin()之前、在.end()之前);
返回后;
}
<强>注释:<强>我的代码不是最优的,C++中重写JS的想法也很奇怪。我的答案是简单地勾勒出问题中提出的问题,<强>不要给出快速排序< <强> > /p> < p>的C++实现,以使用两个向量,可以使用STD::合并。
例如:代码:> St:::V1..EngEnter(,V2.EngEnter),v2..Enter(),STD::Buff-IdxPoter(DST);/P>使用不止一行。LOL当然是很棒的,我理解,但是我的C++有点生锈,所以一个例子是NeCeCeNeNATEDATABASE <代码> V<代码>和<代码> V2<代码>:<代码> v.插入(v.Enter),v2..No.(),v2..()。将分区放在适当的位置以避免额外的分配(因此使用范围而不是容器)会更有效。而且除非是为了练习,我们有
std::sort
。
vector<int> quickSort(vector<int> arr)
{
// ...
// Sort `before` and `after`
before = quickSort(before);
after = quickSort(after);
// Modify `after` and return it.
after.push_back(pivotValue);
after.insert(after.end(), before.begin(), before.end());
return after;
}