我正在尝试学习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;
}

最佳答案

首先,不要。

如果您只是想弄混,可以将迭代器替换为实际的指针:

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

除了不完成std::sort所做的所有工作外,qsort还有一件意外的事情。慢一点
  • 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是最慢的,其后是2(传递给std::sort的函数指针)。 1和3(默认值和函子)是最快的(与带有-O3标志的gnu的g++一起编译)。

    关于c++ - 试图与 vector 一起使用qsort,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12308243/

    10-12 02:11