【发布时间】:2019-07-31 23:29:48
【问题描述】:
我有一个包含一些数据的对象,例如:
class Employee{
private:
int employee_number;
// +more objects and data
public:
int get_number() {
return employee_number;
}
};
对象存储在指针数组中:
Employee* employees[MAX + 1];
Employee中的第一个元素没有被使用,所以算法跳过了employees[0]
每次添加新员工时都会调用排序算法,排序算法如下所示:
int to = employees.length - 1;
for (int from = 1; from < to; from++) {
if (employees[from]->get_number() > employees[from + 1]->get_number()) {
Employee *tmp = employees[from + 1];
int i = from;
while (i >= 1 && employees[i]->get_number() > tmp->get_number()) {
employees[i + 1] = employees[i];
i--;
}
employees[i + 1] = tmp;
}
}
我不确定为什么这不对雇员数组进行排序,因为该算法适用于常规 int 数组。另外请记住,我的整个代码都是用我自己的语言编写的,所以我必须在这里翻译成英文。
【问题讨论】:
-
您的
tmp成员只是一个指针,您确定这就是您的意图吗?我希望您需要一个额外的Employee对象来进行这样的就地排序 -
部分分配是让构造函数读取用户输入,所以如果我这样做
Employee tmp = new Employee;它将调用构造函数,所以我想在这种情况下我需要绕过构造函数。 -
employees.length对于Employee* employees[MAX + 1]的格式不正确 -
@eerorika 是的,对不起,应该放点别的东西,在源代码中它是一个整数,代表下一个值。例如
int lastUsed = 1,每次创建新员工时都会增加。我认为在这里使用 .length 代表相同的想法 -
std::sort与 lambda 谓词有什么问题?对于这么简单的问题,这看起来太复杂了。