2008-10-28 14 views

cevap

9

std::sort() çalışması gerekir:

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

Bu başlangıç ​​yineleyici olarak dizideki ilk elemana işaretçi ve son iterasyon olarak son öğenin ardına birine işaretçi kullanır (yine indirgenmedikleri asla , yani her şey iyi. Sen dizi daha ilginç veriler içeriyorsa da özel bir yüklemi geçebileceği:

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 - ve CArray kullanmayın.

+0

Sadece MSDN taraması yaparken, CArray öğesinin verileri sürekli olarak sakladığını garanti edemiyorum. Bunu beklerim, ama ... std :: vektör başlangıçta bu kusur vardı ve keşfedildiği zaman standart düzeltildi. –

+1

Bak: http://msdn.microsoft.com/en-us/library/yzsdcs85(VS.80).aspx (veya sadece afxtempl.h kaynağını okuyun). MFC, bir korsan topluluğu kadar standart bir şey değil. – Shog9

+0

Teşekkürler, onu görmedim! –