2008-10-28 4 views

Répondre

9

std::sort() devrait fonctionner:

CArray<int> arrayOfInts; 
arrayOfInts.Add(7); 
arrayOfInts.Add(114); 
arrayOfInts.Add(3); 
std::sort(arrayOfInts.GetData(), arrayOfInts.GetData()+arrayOfInts.GetSize()); 

Il utilise le pointeur sur le premier élément du tableau comme iterator de départ, et le pointeur vers un passé le dernier élément que le dernier iterator (ne devrait jamais être déréférencé de toute façon , alors tout va bien). Vous pouvez également passer dans un prédicat personnalisé si le tableau contenait des données plus intéressantes:

struct Foo 
{ 
    int val; 
    double priority; 
}; 

bool FooPred(const Foo& first, const Foo& second) 
{ 
    if (first.val < second.val) 
     return true; 
    if (first.val > second.val) 
     return false; 
    return first.priority < second.priority; 
} 

//... 

    CArray<Foo> bar; 
    std::sort(bar.GetData(), bar.GetData()+bar.GetSize(), FooPred); 

Oh - et ne pas utiliser CArray.

+0

En parcourant simplement MSDN, je ne vois aucune garantie que CArray stocke les données de manière contiguë. Je m'attends à ce qu'il le fasse, mais ... std :: vector avait initialement cette faille, et le standard a été corrigé quand il a été découvert. –

+1

Voir ici: http://msdn.microsoft.com/en-us/library/yzsdcs85(VS.80).aspx (ou juste lire la source dans afxtempl.h). Ce n'est pas comme MFC est une norme autant qu'une collection de hacks. – Shog9

+0

Merci, n'a pas vu celui-là! –