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

No matching function for call to 'merge(std::vector<int>&, std::vector<int>&)

本文关键字:vector std int am merge 函数 调用      更新时间:2023-10-16
#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);做错了吗?

是通过判断错误来带有指针的东西吗?

我尝试声明为指针向量,看看这是否有效,但它没有。

C++和

C一样,从上到下读取。 在mergesort中它调用merge的点,该函数不存在。 要么反转实现,要么声明merge以上mergesort

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

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

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

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

std::vector <int> merge(std::vector <int> list1, std::vector <int> list2);
相关文章: