我的班上有一系列指针需要排序。 排序工作正常,我只是不确定,我是否只是在班级或整个班级上转换...
我的代码就像:
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;
但它没有用: - /(我甚至无法编译代码)
提前感谢解释:)
答案 0 :(得分:0)
您正在混合概念:temp
是指针,items[i]
是ITEM,items+i+1
是指针。所以,如果你想使用指针,好的代码必须是:
// creating items
ITEMS **items = new ITEM*[set.pathc];
....
// for filling data
for (i = 0; i < set.pathc; i++)
{
*(items + i) = new ITEM; // new ITEM in pointer
(*(items + i))->data = .....;
}
.....
// compare and switching data
if (compare(*(items + i), *(items + i + 1) .....)
{
ITEM *temp = *(items + i);
*(items + i) = *(items + i + 1);
*(items + i + 1) = temp;
}
当然,您可以像现在一样声明:
ITEM *items = new ITEM[set.pathc];
但是在这种情况下,切换代码不能用指针做,因为你没有在数组中存储指针,只是ITEMS。
如果您的问题没有太多切换情况,我建议不要使用ITEM **,因为动态分配开销。