Попытка использовать qsort с вектором

Я пытаюсь выучить c ++ и пытаюсь использовать sort и qsort. sort () работает просто отлично
но qsort нет, я не знаю почему, так что вы можете мне помочь, пожалуйста
это код, который я пытался скомпилировать

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

14

Решение

Прежде всего, НЕ.

Если вы просто хотите разобраться, вы можете заменить итераторы действительными указателями:

qsort(&numbers[0], numbers.size(), sizeof(int), compvar);

Помимо не делать всю работу std::sort делает, есть одна неожиданная вещь о qsort, это помедленнее.

  1. sort (myvector1.begin(), myvector1.end());

  2. sort (myvector2.begin(), myvector2.end(), myfunction);

  3. sort (myvector3.begin(), myvector3.end(), myobject);

  4. qsort(&myvector4[0], myvector4.size(), sizeof(int), cmyfunction);

4 — самый медленный, затем 2 (указатель на функцию передается std::sort). 1 и 3 (по умолчанию и функтор) — самые быстрые (скомпилированные с gnu g ++ с флагом -O3).

21

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]