정렬해야하는 클래스에 포인터 배열이 있습니다. (포인터/값 전환
ITEM *items = new ITEM[set.pathc];
...
bool change = true;
while(change)
{
change = false;
for(i = 0; i < set.pathc-1; i++)
{
if(compare(items+i, items+i+1, set.order, set.order_asc))
{
ITEM temp;
temp = *(items+i);
items[i] = items[i+1];
items[i+1] = temp;
change = true;
}
}
}
그래서 내 코드가 전환됩니다 단지 포인터 : 정렬은
내 코드가 같은입니다 ... 임 스위칭 그냥 클래스 또는 전체 클래스를 참조하는지 여부, 임 그냥 확실하지, 제대로 작동 개체가 할당 된 곳의 주소 나 전체 개체 (예 : 모든 개인 변수를 복사 할 때 "="연산자가 필요하지 않습니까?)? 나는 그것이 훨씬 더 빠른 것 같아요 때문에
내가 전환 할그냥 내가이
ITEM *temp
temp = item+i;
item[i] = item+i+1;
item[i+1] = temp;
처럼 시도했지만 일을 일부러 포인터 : -/(I couldnt는 심지어 코드를 컴파일)
설명에 미리감사합니다 :)
이미 코드를 다시 작성했지만 "동적 할당 오버 헤드"와 "ITEM * *'"을 사용하지 않는 이유를 알려주십시오. 이제 큰 메모리를 할당하는 데 문제가 있습니다. 'ITEM * * items; items = (ITEM * *) malloc (sizeof (ITEM * *) * set.pathc); (ITEM *) malloc (sizeof (ITEM)); \t * (items + i) = new_item; \t/* 항목 이름과 경로를 설정합니다. */ \t (* (items + i)) -> SetFullPath(); }' 및 mem 정렬 (-> 임시 -> 첫 번째, 임시 -> 초). 그러나 나는 그것의 천천히 추측한다. – Buksy
일반적으로 동적 할당은 new/malloc을 사용하여 정상적인 스택 생성 및 복사 작업보다 오버 헤드를 발생시킵니다. 많은 항목을 가지고 있지 않다면 작업을 정렬 할 필요가 없기 때문에 컨테이너에서 스택 및 항목 복사 작업을 시도해 볼 수 있습니다. 그러나 항목 수가 너무 많고 컨테이너가 일반적으로 정렬되지 않은 경우 포인터를 전환하여 더 나은 성능을 얻습니다. –