Trying to use qsort with vector
First of all, DON'T.
If you just want to muck about, you can replace iterators with actual pointers:
qsort(&numbers[0], numbers.size(), sizeof(int), compvar);
Apart from not doing all the work std::sort
does, there is one unexpected thing about qsort
. It is slower.
sort (myvector1.begin(), myvector1.end());
sort (myvector2.begin(), myvector2.end(), myfunction);
sort (myvector3.begin(), myvector3.end(), myobject);
qsort(&myvector4[0], myvector4.size(), sizeof(int), cmyfunction);
4 is the slowest, followed by 2 (function pointer passed to std::sort
). 1 and 3 (default and functor) are the fastest (compiled with gnu's g++ with -O3 flag).
user1653150
Updated on April 30, 2020Comments
-
user1653150 about 4 years
I'm trying to learn c++ and was trying using sort and qsort. sort() works just fine but qsort doesn't, I don't know why, so can you help me please this is the code I was trying to compile
#include<iostream> #include<vector> #include<cstdlib> #include<ctime> #include<algorithm> using namespace std; int compvar(const void *one, const void *two) { int a = *((int*)one); int b = *((int*)two); if (a<b) return -1; if (a == b) return 0; return 1; } void bvect(vector<int> &vec, int num) { srand(time(NULL)); for(int i=0; i<num; ++i) vec.push_back(rand()%1000 + 1); } void showvec(vector<int> vec) { for (int i=0; i<vec.size(); ++i) cout<<vec[i]<<endl; } int main() { vector<int>numbers; bvect(numbers, 1000); showvec(numbers); qsort(numbers.begin(), numbers.size(), sizeof(int), compvar); showvec(numbers); return 0; }
-
user1653150 over 11 yearsThanks for the answers.It worked!. I know qsort() is slower than sort() and that's what I was trying to test, I'm taking a programming course and the professor told us to test them both.again thanks