gpt4 book ai didi

c++ - 候选人期望6个参数,提供2个(合并排序 vector )

转载 作者:行者123 更新时间:2023-12-02 11:08:58 25 4
gpt4 key购买 nike

我正在尝试在C++中实现mergesort树,但出现错误

note:   template argument deduction/substitution failed:
C:\Users\IT Services\Documents\mergetree.cpp:15:38: note: candidate expects 6 arguments, 2 provided
tree[k]=merge(tree[2*k],tree[2*k+1]);

这是代码:
#include <bits/stdc++.h>

using namespace std;

vector<vector<int>> tree;
int n;

void update (int k, vector<int> vect)
{
k+=n;
tree[k]=vect;

for (k/=2;k>=1;k/=2)
{
tree[k]=merge(tree[2*k],tree[2*k+1]);
}
}

vector<int> merge (vector<int> arr1, vector<int> arr2)
{
int a1=arr1.size(), a2=arr2.size();
vector<int> sortvect(a1+a2);

int i=0,j=0,k=0;

while (i<a1&&i<a2) sortvect[k++]=((arr1[i]<arr2[j])?arr1[i++]:arr2[j++]);
while (i<a1) sortvect[k++]=arr1[i++];
while (j<a2) sortvect[k++]=arr2[j++];

return sortvect;
}

int main()
{
cin>>n; tree.resize(2*n,{0});
int a;

for (int i=0;i<n;i++)
{
cin>>a;
update(i,{a});
}
}

显然,合并功能不需要6个参数。编译器为什么会认为呢?

[另外,请忽略编写代码的糟糕方式。我正在为即将到来的比赛进行练习,目前尚无干净的编码约定。]

最佳答案

标准算法库中有一个std::merge API(http://en.cppreference.com/w/cpp/algorithm/merge)。它的风格有6个参数。您在第15行的合并调用可能不适合这些功能之一。

您可以通过检查错误描述后列出的候选者来确保这一点。

您应该在计划使用该行的行之前转发声明您的合并方法。而不是using namespace std;,显式地解析您要使用std方法的范围。在第15行上,将合并称为:: merge。而且,如果只希望合并具有文件作用域,则将其放在未命名的命名空间中。

关于c++ - 候选人期望6个参数,提供2个(合并排序 vector ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48017139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com