Estoy tratando de aprender c++ y estaba tratando de uso de ordenar y qsort. sort() funciona bien
pero qsort no, no sé por qué, así que me pueden ayudar por favor
este es el código que yo estaba tratando de compilar

#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;
}
Permítanme ser el primero en aconsejar que «Acaba de decir ¡NO!». El uso de qsort en un vector es simplemente las nueces.
¿por Qué te desea utilizar qsort?!
Usted parece estar haciendo la suposición de que su aplicación utiliza raw punteros como el vector de los iteradores. ¿No es así? Independientemente de que tu código no debería suponer que se hace. Uso &numbers[0] en lugar de numbers.begin().
si usted está aprendiendo C++, olvídate de qsort y otros C-funciones
utilizar la comparación como aquí cplusplus.com/reference/clibrary/cstdlib/qsort y también debe llamar a srand sólo una vez, así que sería mejor si usted lo llama en la función principal

OriginalEl autor user1653150 | 2012-09-06

1 Comentario

  1. 21

    Primero de todo, NO.

    Si sólo quieres muck acerca de, usted puede reemplazar los iteradores con punteros:

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

    Aparte de no hacer todo el trabajo std::sort hace, hay un hecho inesperado acerca de qsort. Es más lento.

    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 es el más lento, seguido por 2 (puntero de función pasa a std::sort). 1 y 3 (predeterminado y functor) son los más rápidos (compilado con gnu g++ con -O3 bandera).

    Gracias por las respuestas.Funcionó!. Sé qsort() es más lento que el sort() y eso es lo que yo estaba tratando de probar, me estoy tomando un curso de programación y el profesor nos dijo que la prueba de ambos.de nuevo gracias

    OriginalEl autor Ivan

Dejar respuesta

Please enter your comment!
Please enter your name here