简体   繁体   中英

C++ undeclared identifier vector

I have the following code for quick sort. When I compile the code it shows following errors:

Error C2065: 'vector' :undeclared identifier
Error C2062: type int : unexpected
Error C3861: 'quicksort': identifier not found

#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);
}

move : using namespace std; above quicksort declaration

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

using namespace std;

or better dump using namespace std , and change to:

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

vector , like nearly everything in the standard library, is in namespace std ; so the name needs to be qualified. You also need to take the vector by reference, otherwise the function will sort a local copy and have no useful effect.

void quicksort(std::vector<int> &, int, int);
               ^^^^^            ^

In its current form, the rest of the code doesn't need to qualify the standard names since using namespace std; dumps everything you need and more into the global namespace. This is a bad idea, since some of these names (such as partition ) might clash with names that you want to declare yourself. You should remove the using directive, and qualify the other standard names (like std::cout ) that you use.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM