没有匹配函数来调用'merge(std :: vector <int>&amp;,std :: vector <int>&amp;)

时间:2016-05-02 20:14:47

标签: c++ vector

#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);时做错了什么?

通过判断错误是否有指针的东西?

我已经尝试将其声明为指针向量,看看它是否有效,但事实并非如此。

3 个答案:

答案 0 :(得分:3)

您必须在引用之前声明合并函数:

extern std::vector <int> merge(std::vector <int> list1, std::vector <int> list2);
return merge(v2, v3);

答案 1 :(得分:3)

像C一样,C ++从上到下阅读。在mergesort调用merge的位置,该函数不存在。要么颠倒实现,要么在merge之上声明mergesort

答案 2 :(得分:3)

在C ++中,你必须在调用之前声明函数。

merge的整个定义移到顶部(将其放在mergesort之前),或在顶部预先声明merge

std::vector <int> merge(std::vector <int> list1, std::vector <int> list2);