求助!这是我写的快速排序的算法,为什么编译时出错并提示“swap函数应输入两个参数,却提供了3个”啊~~谢谢大家啦!
#include
using namespace std;
inline int findpivot(int arr[],int i,int j){
return (i+j)/2;
}
inline int partition(int arr[],int l,int r,int pivot){
do{
while(arr[++l]>pivot);
while((larr[--r]));
swap(arr,l,r);
}while(l<r);
return l;
}
inline void swap(int arr[],int i,int j){
int t;
t=arr[i];
arr[i]=arr[j];
arr[j]=arr[i];
}
void qsort(int arr[],int i,int j){
if(j<=i)
return;
int pivotindex =findpivot(arr,i,j);
swap(arr,pivotindex,j);
int k=partition(arr,i-1,j,arr[j]);
swap(arr,k,j);
qsort(arr,i,k-1);
qsort(arr,k+1,j);
}
int main(){
int a[10];
for(int i=0;i cin>>a[i];
qsort(a,0,9);
for(int i=0;i<10;i++)
cout<<a[i]<<" ";
}
错误信息如下:
1>------ 已启动生成: 项目: test1_4, 配置: Debug Win32 ------
1>生成启动时间为 2015/5/13 18:03:47。
1>InitializeBuildStatus:
1> 正在对“Debug\test1_4.unsuccessfulbuild”执行 Touch 任务。
1>ClCompile:
1> test_4.cpp
1>e:\vs2010\exercise\test1_4\test1_4\test_4.cpp(12): error C2780: “void std::swap(std::basic_iostream<_Elem,_Traits> &,std::basic_iostream<_Elem,_Traits> &)”: 应输入 2 个参数,却提供了 3 个
1> d:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(970) : 参见“std::swap”的声明
1>e:\vs2010\exercise\test1_4\test1_4\test_4.cpp(12): error C2780: “void std::swap(std::basic_istream<_Elem,_Traits> &,std::basic_istream<_Elem,_Traits> &)”: 应输入 2 个参数,却提供了 3 个
1> d:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(865) : 参见“std::swap”的声明
1>e:\vs2010\exercise\test1_4\test1_4\test_4.cpp(12): error C2780: “void std::swap(std::basic_ostream<_Elem,_Traits> &,std::basic_ostream<_Elem,_Traits> &)”: 应输入 2 个参数,却提供了 3 个
1> d:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(609) : 参见“std::swap”的声明
1>e:\vs2010\exercise\test1_4\test1_4\test_4.cpp(12): error C2780: “void std::swap(std::basic_string<_Elem,_Traits,_Alloc> &&,std::basic_string<_Elem,_Traits,_Alloc> &)”: 应输入 2 个参数,却提供了 3 个
1> d:\program files (x86)\microsoft visual studio 10.0\vc\include\xstring(2056) : 参见“std::swap”的声明
1>e:\vs2010\exercise\test1_4\test1_4\test_4.cpp(12): error C2780: “void std::swap(std::basic_string<_Elem,_Traits,_Alloc> &,std::basic_string<_Elem,_Traits,_Alloc> &&)”: 应输入 2 个参数,却提供了 3 个
1> d:\program files (x86)\microsoft visual studio 10.0\vc\include\xstring(2047) : 参见“std::swap”的声明
1>e:\vs2010\exercise\test1_4\test1_4\test_4.cpp(12): error C2780: “void std::swap(std::basic_string<_Elem,_Traits,_Alloc> &,std::basic_string<_Elem,_Traits,_Alloc> &)”: 应输入 2 个参数,却提供了 3 个
1> d:\program files (x86)\microsoft visual studio 10.0\vc\include\xstring(2038) : 参见“std::swap”的声明
1>e:\vs2010\exercise\test1_4\test1_4\test_4.cpp(12): error C2780: “void std::swap(std::pair<_Ty1,_Ty2> &&,std::pair<_Ty1,_Ty2> &)”: 应输入 2 个参数,却提供了 3 个
1> d:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(294) : 参见“std::swap”的声明
1>e:\vs2010\exercise\test1_4\test1_4\test_4.cpp(12): error C2780: “void std::swap(std::pair<_Ty1,_Ty2> &,std::pair<_Ty1,_Ty2> &&)”: 应输入 2 个参数,却提供了 3 个
1> d:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(286) : 参见“std::swap”的声明
1>e:\vs2010\exercise\test1_4\test1_4\test_4.cpp(12): error C2780: “void std::swap(std::pair<_Ty1,_Ty2> &,std::pair<_Ty1,_Ty2> &)”: 应输入 2 个参数,却提供了 3 个
1> d:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(279) : 参见“std::swap”的声明
1>e:\vs2010\exercise\test1_4\test1_4\test_4.cpp(12): error C2780: “void std::swap(_Ty &,_Ty &)”: 应输入 2 个参数,却提供了 3 个
1> d:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(100) : 参见“std::swap”的声明
1>
1>生成失败。
1>
1>已用时间 00:00:00.64
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
swap 的定义或声明,都在调用之后,竟然没有报 swap 未定义的错误。说明,系统可能有同名的函数,且只有两个 参数。
所以,你最好是将你定义的 swap 函数改个名试试。
和系统的冲突了,要使用的函数放到使用地方前面