我有一系列学生,我正在尝试将另一名学生添加到列表中。我正在编写add方法,该方法将根据学生的姓名按字母顺序将学生添加到列表中。然后,列表中的所有其他元素将相应地移位。这是我尝试写的:
void Array::add(Student* student)
{
if (size == MAX_STUDENTS)
return;
if(size == 0){
students[0] = student;
size ++;
}
if (size != 0){
for(int i = 0; i < MAX_STUDENTS; ++i){
if(students[i]->getName() >= student->getName()){
students[i-1] = student;
size ++;
}
}
}
}
学生是一个指向学生对象Student** students;
的指针数组,它在构造函数中与size
一起初始化
但是,这不会对元素进行排序。我猜我的逻辑不正确。我也不知道如何将元素向下移动。任何帮助将受到高度赞赏。
答案 0 :(得分:1)
向下移动项目时,从列表中的最后一项开始,一直向前移动到插入点。应该是这样的:
int i;
for (i = size - 1; students[i]->getName() >= student->getName(); i--)
{
students[i+1] = students[i];
}
students[i] = student;
size++;
更好的方法是让学生实施&lt;运算符并使用std::set或std::priority_queue。为什么重新发明轮子?