2008-10-28 5 views

답변

9

std::sort() 작동합니다 :

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

이것은 시작 반복자와 같은 배열의 첫 번째 요소에 대한 포인터, 마지막 반복자와 마지막 요소 지난 1 포인터를 사용합니다 (어쨌든 역 참조하면 안됩니다 , 그래서 모두 잘). 당신은 배열이 더 흥미로운 데이터가 포함 된 경우에도 사용자 정의 술어에 전달할 수 :

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는 처음에이 결함을 가지고 있었고 발견되었을 때 표준이 수정되었습니다. –

+1

여기를 참조하십시오 : http://msdn.microsoft.com/en-us/library/yzsdcs85(VS.80).aspx (또는 단지 afxtempl.h의 소스를 읽으십시오). MFC는 해킹 컬렉션만큼이나 표준이 아닙니다. – Shog9

+0

고마워요, 그걸 보지 못했습니다! –

관련 문제