MERGE SORTアルゴリズムを実装しています。入力番号のリストとして std::list < int > を使用します。これは私のコードです:
#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 でこのソース ファイルをビルドしたところ、次のエラーが発生しました: error C2064: term does not evaluate to a function taking 2 arguments (file)c:\program files (x86)\microsoft visual studio 11.0\vc\include\xutility (line)595 このエラーに対処したのはこれが初めてで、修正方法がわかりません...皆さんがこれで私を助けてくれることを願っています。