0
我有我需要排序的類的指針數組。 排序工作正常,我只是不知道,林切換是否只是在類或全班參考...切換指針/值
我的代碼是這樣的:
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;
,但它沒有工作: - /(我想不出甚至編譯代碼)
預先感謝解釋:)
我已經重寫了代碼,但是請問您爲什麼不使用「ITEM * *'」來表示「動態分配開銷」是什麼意思? 現在,我有這樣的(但有分配大內存的問題): 'ITEM * * items; items =(ITEM * *)malloc(sizeof(ITEM * *)* set.pathc);對於(i = 0; i SetFullPath(); }' 和Im使用memcpy( - > temp, - > first,temp-> second)排序。但我猜它很慢。 –
Buksy
通常,使用new/malloc進行動態分配會產生比正常堆棧創建和複製操作更多的開銷。如果你沒有太多項目,你可以嘗試在你的容器中使用堆棧和項目複製操作,因爲你沒有太多的排序操作。但是,如果物品數量如此之高,並且容器通常非常分散,通過切換指示器可以獲得更好的性能 –