C ++未声明的标识符向量

时间:2014-01-24 12:39:46

标签: c++ visual-c++-2010

我有以下代码供快速排序。 当我编译代码时,它显示以下错误:

错误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);
}

2 个答案:

答案 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)。