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

C++ C++;未声明的标识符向量,c++,visual-c++-2010,C++,Visual C++ 2010,我有下面的快速排序代码。 编译代码时,会显示以下错误: 错误C2065:“向量”:未声明的标识符 错误C2062:类型int:意外 错误C3861:“快速排序”:找不到标识符 #include "iostream" #include "conio.h" #include "vector" void quicksort(vector<int>,int,int); int partition(vector<int>,int,int); using namespace std

我有下面的快速排序代码。 编译代码时,会显示以下错误:

错误C2065:“向量”:未声明的标识符
错误C2062:类型int:意外
错误C3861:“快速排序”:找不到标识符

#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);
}
#包括“iostream”
#包括“conio.h”
#包括“向量”
无效快速排序(向量、整数、整数);
int分区(向量,int,int);
使用名称空间std;
int main()
{未排序的向量;
int n,x,y;

//coutmove:
使用名称空间std;
以上快速排序声明

void quicksort(vector<int>,int,int);
int partition(vector<int>,int,int);

using namespace std;

移动:
使用命名空间std;
以上快速排序声明

void quicksort(vector<int>,int,int);
int partition(vector<int>,int,int);

using namespace std;

vector
,与标准库中的几乎所有内容一样,都位于命名空间
std
;因此名称需要限定。您还需要通过引用获取向量,否则该函数将对本地副本进行排序,并且没有任何有用的效果

void quicksort(std::vector<int> &, int, int);
               ^^^^^            ^
void快速排序(std::vector&,int,int);
^^^^^            ^

在其当前形式中,代码的其余部分不需要限定标准名称,因为
使用名称空间std;
会将您需要的所有内容和更多内容转储到全局名称空间中。这是一个坏主意,因为其中一些名称(例如
分区
)可能与您要声明的名称冲突。您应该删除using指令,并限定其他标准名称(如
std::cout
)您使用的。

vector
,与标准库中的几乎所有内容一样,都位于命名空间
std
;因此名称需要限定。您还需要通过引用获取向量,否则该函数将对本地副本进行排序,并且没有任何有用的效果

void quicksort(std::vector<int> &, int, int);
               ^^^^^            ^
void快速排序(std::vector&,int,int);
^^^^^            ^

在其当前形式中,代码的其余部分不需要限定标准名称,因为
使用名称空间std;
会将您需要的所有内容和更多内容转储到全局名称空间中。这是一个坏主意,因为其中一些名称(例如
分区
)可能与您要声明的名称冲突。您应该删除using指令,并限定其他标准名称(如
std::cout
)您使用的。

括号,而不是引号:
#include
#include
。正确的缩进/格式将很好。这并不能解决问题。并且使用namespace std;
将函数声明放在
后面。此外,您的快速排序函数不会修改传入的向量,而是它的一个副本,以便您可以nt通过引用传递它。括号,而不是引号:
#include
#include
。正确的缩进/格式将很好。这并不能解决问题。并且使用namespace std;
将函数声明放在
后面。此外,快速排序函数不会修改传入的向量,而是它的副本,以便可能希望通过引用传递它。然后读取、删除它,并正确地限定名称。然后读取、删除它,并正确地限定名称。@MikeSeymour在完成您所述的所有更改后,当我运行程序时,出现向量下标异常。请帮助。@AbhishekJain:这意味着您正在使用超出范围的索引访问向量。逐级检查调试器中的程序以找出位置。@MikeSeymour在执行了您所述的所有更改后,当我运行该程序时,会出现向量下标异常。请提供帮助。@AbhishekJain:这意味着您正在使用超出范围的索引访问向量。逐级检查调试器中的程序以找出位置。