#include <iostream>
#include <algorithm>
#include <vector>
std::vector <int> mergesort(std::vector <int> list)
{
int n = list.size();
if(n == 1)
{
return list;
}
std::vector<int> v2(list.begin(), list.begin() + list.size()/2),
v3(list.begin() + list.size()/2, list.end());
v2 = mergesort(v2);
v3 = mergesort(v3);
return merge(v2, v3);
}
std::vector <int> merge(std::vector <int> list1, std::vector <int> list2)
{
std::vector <int> list3;
while(list1.size() > 0 && list2.size() > 0)
{
if(list1[0] > list2[0])
{
list3.push_back (list2[0]);
list2.erase (list2.begin());
}
else
{
list3.push_back (list1[0]);
list1.erase (list1.begin());
}
}
while(list1.size() > 0)
{
list3.push_back (list1[0]);
list1.erase (list1.begin());
}
while(list2.size() > 0)
{
list3.push_back (list2[0]);
list2.erase (list2.begin());
}
return list3;
}
int main()
{
}
我在第16行收到错误,错误是:
No matching function for call to 'merge(std::vector<int>&, std::vector<int>&)
我在回复merge(v2,v3);
时做错了什么?
通过判断错误是否有指针的东西?
我已经尝试将其声明为指针向量,看看它是否有效,但事实并非如此。
答案 0 :(得分:3)
您必须在引用之前声明合并函数:
extern std::vector <int> merge(std::vector <int> list1, std::vector <int> list2);
return merge(v2, v3);
答案 1 :(得分:3)
mergesort
调用merge
的位置,该函数不存在。要么颠倒实现,要么在merge
之上声明mergesort
。
答案 2 :(得分:3)
在C ++中,你必须在调用之前声明函数。
将merge
的整个定义移到顶部(将其放在mergesort
之前),或在顶部预先声明merge
:
std::vector <int> merge(std::vector <int> list1, std::vector <int> list2);