请教大神,我调试了一晚上都查不出问题来。
PtrArray2.h 文件
#pragma once
#include "afxcoll.h"
typedef int (__cdecl *GENERICCOMPAREFN)(const void * elem1, const void * elem2);
typedef int (__cdecl *STRINGCOMPAREFN)(const void ** elem1, const void ** elem2);
class CPtrArray2 :
public CPtrArray
{
public:
CPtrArray2(void);
~CPtrArray2(void);
public:
void Sort(STRINGCOMPAREFN pfnCompare = Compare);
protected:
static int __cdecl Compare(const void ** pstr1, const void ** pstr2);
};
PtrArray2.cpp
#include "stdafx.h"
#include "PtrArray2.h"
CPtrArray2::CPtrArray2(void)
{
}
CPtrArray2::~CPtrArray2(void)
{
}
int CPtrArray2::Compare(const void ** pstr1, const void ** pstr2)
{
ASSERT(pstr1);
ASSERT(pstr2);
int n1 = (**((int **)pstr1));
int n2 = (**((int **)pstr2));
return n1 < n2;
//return (**((int **)pstr1)) > (**((int **)pstr2));
}
void CPtrArray2::Sort(STRINGCOMPAREFN pfnCompare /*= CSortedStringArray::Compare */)
{
void ** prgstr = GetData();
int nSize = GetSize();
qsort(prgstr, GetSize(), sizeof(void *),(GENERICCOMPAREFN)pfnCompare);
}
主程序.cpp中调用
srand( (unsigned)time( NULL ) ); // Generate seed for rand().
CPtrArray2 arr;
int *ptr = NULL;
for (int i=0; i< 10;i++)
{
int n = rand();
int *p = new int(n);
arr.Add( p );
TRACE("%d------->%d\n",p, *p);
}
TRACE("\n\n");
long ltim=GetTickCount();
arr.Sort();
for (int i=0; i< 10;i++)
{
TRACE("%d--------->%d\n", arr[i], (*(int *)(arr[i])));
}
TRACE("Time took= %li\n", GetTickCount()-ltim);
结果没能正确排序,请问是什么原因呢?