2008-10-28 8 views

Antwort

9

std::sort() sollte funktionieren:

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

Dieser den Zeiger auf das erste Element verwendet in dem Array als Start Iterator, und der Zeiger auf eine nach dem letzten Element als das letzte Iterator (sollte sowieso nie dereferenziert werden Also, alles ist gut). Sie könnten auch in einem benutzerdefinierten Prädikat übergeben, wenn das Array interessante Daten enthalten:

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 - und nicht CArray verwenden.

+0

Beim Durchsuchen von MSDN sehe ich keine Garantie, dass CArray Daten zusammenhängend speichert. Ich erwarte es, aber ... Std :: Vector hatte zunächst diesen Fehler, und der Standard wurde korrigiert, als es entdeckt wurde. –

+1

Siehe hier: http://msdn.microsoft.com/en-us/library/yzsdcs85(VS.80).aspx (oder einfach die Quelle in afxtempl.h lesen). Es ist nicht so, dass MFC ein Standard ist, sondern eine Sammlung von Hacks. – Shog9

+0

Danke, habe das nicht gesehen! –

Verwandte Themen