2008-10-28 109 views

回答

9

std::sort()應該工作:

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

這裏使用的指針數組作爲開始迭代器的第一個元素,而指針到一個過去的最後一個迭代器的最後一個元素(不應該反正解除引用,所以一切都很好)。您也可以通過在自定義斷言,如果數組包含更多有趣的數據:

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); 

噢 - 不使用CArray

+0

只是瀏覽MSDN,我沒有看到任何保證CArray連續存儲數據。我期望它,但... std :: vector最初有這個缺陷,並且標準被發現時被糾正。 – 2008-10-28 23:06:27

相關問題