C ++ - 使用<list> template </list>时得到'错误C2064'

时间:2013-11-13 18:34:46

标签: c++ list mergesort

我正在实施 MERGE SORT 算法。我用std :: list&lt; int&gt;作为我的输入数字列表。这是我的代码:

#include <iostream>
using namespace std;
#include <list>

void MergeSort(list<int> _list)
{
    if (_list.size() > 1)
    {
        list<int> left;
        list<int> right;
        int mid = (0+_list.size())/2;
        list<int>::iterator i = _list.begin();
        for (int j = 0; j<mid; j++) ++i;
        left.assign(_list.begin(),++i);
        right.assign(i, _list.end());
        MergeSort(left);
        MergeSort(right);
        _list.merge(left,right);
    }
    return;
}
int main()
{
    list<int> myList;
    myList.push_front(38);
    myList.push_back(27);
    myList.push_back(43);
    myList.push_back(3);
    myList.push_back(9);
    myList.push_back(82);
    myList.push_back(10);
    cout << "Before sorting:\n";
    list<int>::iterator i;
    for(i=myList.begin(); i != myList.end(); ++i) cout << *i << " ";
    // Merge Sort Function
    MergeSort(myList);
    //
    cout << "\nAfter sorting:\n";
    for(i=myList.begin(); i != myList.end(); ++i) 
    {
        cout << *i << " ";
    }
    system("pause");
    return 0;
}

但是我在Visual Studio 2012上构建了这个源文件并得到了这个错误:错误C2064:term不评估为带2个参数的函数(文件)c:\ program files(x86)\ microsoft visual studio 11.0 \ vc \ include \ xutility(line)595 这是我第一次处理这个错误并且我不知道如何修复它...希望你们能帮助我解决这个问题,非常感谢先进!

1 个答案:

答案 0 :(得分:2)

您未在表达式list<int>::merge中正确使用_list.merge(left, right); 检查documentation是否有合并功能。在那里你也可以找到一个如何使用它的例子。