我有以下代码供快速排序。 当我编译代码时,它显示以下错误:
错误C2065:'vector':未声明的标识符
错误C2062:输入int:意外
错误C3861:'quicksort':找不到标识符
#include "iostream"
#include "conio.h"
#include "vector"
void quicksort(vector<int>,int,int);
int partition(vector<int>,int,int);
using namespace std;
int main()
{ vector<int> unsorted;
int n,x,y;
//cout<<"Initial size: "<<unsorted.size()<<"\n Capacity: "<<unsorted.capacity();
cout<<"Enter the size: ";
cin>>n;
cout<<"Enter the elements in unsorted array: "<<endl;
for(int a=0;a<n;a++)
{
cin>>x;
unsorted.push_back(x);
}
for(int b=0;b<n;b++)
{
cout<<unsorted[b]<<"\t";
}
x=1;
y=n;
quicksort(unsorted,x,y); //quicksort(array,1,array.length)
for(int m=0;m<n;m++)
{
cout<<unsorted[m]<<"\t";
}
return 0;
}
int partition(vector<int> given,int p,int r)
{
int pivot,i,j;
pivot=given[r];
i=p-1;
for(j=p;j<r-1;j++)
{
if(given[j]<pivot)
i++;
swap(given[i],given[j]);
}
swap(given[i+1],given[r]);
return i+1;
}
void quicksort(vector<int> given,int p,int r)
{ int q;
if(p<r)
q= partition(given,p,r);
quicksort(given,p,q-1);
quicksort(given,q+1,r);
}
答案 0 :(得分:7)
移动:using namespace std;
以上快速排序声明
void quicksort(vector<int>,int,int);
int partition(vector<int>,int,int);
using namespace std;
或更好地转储using namespace std
,并更改为:
void quicksort(std::vector<int>,int,int);
int partition(std::vector<int>,int,int);
答案 1 :(得分:1)
vector
与标准库中的几乎所有内容一样,位于命名空间std
中;所以这个名字需要合格。您还需要通过引用获取向量,否则该函数将对本地副本进行排序并且没有任何有用的效果。
void quicksort(std::vector<int> &, int, int);
^^^^^ ^
在其当前形式中,其余代码不需要限定标准名称,因为using namespace std;
会将您需要的所有内容转储到全局名称空间中。这是一个坏主意,因为其中一些名称(例如partition
)可能会与您想要声明的名称冲突。您应该删除using指令,并限定您使用的其他标准名称(如std::cout
)。