就是不用扩容添加新课程
时间: 2024-10-17 21:04:57 浏览: 15
Java 实例 - 数组扩容源代码-详细设计教程.zip
如果你想要在添加新课程时不进行扩容操作,这通常意味着你需要预先为每个学生分配固定数量的课程空间,比如预设每个学期最多有N门课程。这样做可以简化添加新课程的过程,但如果学生数量或课程数量超过预期,可能会导致空间浪费或数据结构溢出。
在这种情况下,你可以使用动态数组(例如`std::vector`)替换固定大小的数组,并设置一个阈值,当某个学生达到这个阈值时才需要调整空间。下面是修改后的添加和删除成绩的操作:
**添加成绩:**
```cpp
void addScore(StudentClassSemester& classSemester, int studentId, const std::string& courseName, float score) {
auto it = std::find(classSemester.students[studentId].courses.begin(), classSemester.students[studentId].courses.end(),
std::make_pair(courseName, -1)); // 使用课程名和默认-1作为标志
if (it != classSemester.students[studentId].courses.end()) {
// 更新已有课程的成绩
it->second.score = score;
} else {
// 如果没找到,将课程插入到列表末尾
if (classSemester.students[studentId].courses.size() >= classSemester.maxCoursesPerStudent) {
// 选择另一个学生空间不足的情况先扩容
resizeStudentCourses(classSemester, studentId);
}
classSemester.students[studentId].courses.push_back(std::make_pair(courseName, score));
}
}
// 扩容函数(仅用于学生达到最大课程数时)
void resizeStudentCourses(StudentClassSemester& classSemester, int studentId) {
// ...此处添加适当的扩容逻辑,如复制旧数据、移动数据、增加新的存储空间等
}
```
**删除成绩:**
```cpp
bool removeCourse(StudentClassSemester& classSemester, int studentId, const std::string& courseName) {
auto it = std::find(classSemester.students[studentId].courses.begin(), classSemester.students[studentId].courses.end(),
std::make_pair(courseName, -1));
if (it != classSemester.students[studentId].courses.end()) {
// 移除该课程
it = classSemester.students[studentId].courses.erase(it);
return true;
}
return false;
}
```
请注意,这种方案需要你自行处理扩容的具体逻辑,而且如果频繁地达到最大课程数,可能导致性能下降。此外,你还需要确保在删除学生时清除他们所有的课程信息。
阅读全文