本文最后更新于35 天前,其中的信息可能已经过时,如有错误请发送邮件到528407262@qq.com
学生成绩管理系统( 面向对象编程练手)
vector 简介
vector是C++标准库(std::)中的一个动态数组 <vector> 是一个序列容器,它允许用户在容器的末尾快速地添加或删除元素。与数组相比,<vector> 提供了更多的功能,如自动调整大小、随机访问等。
声明一个<vector>
vector<int> myvector;
vector 中的常用成员函数
| 函数 | 说明 |
|---|---|
push_back(const T& val) | 在末尾添加元素 |
pop_back() | 删除末尾元素 |
at(size_t pos) | 返回指定位置的元素,带边界检查 |
operator[] | 返回指定位置的元素,不带边界检查 |
front() | 返回第一个元素 |
back() | 返回最后一个元素 |
data() | 返回指向底层数组的指针 |
size() | 返回当前元素数量 |
capacity() | 返回当前分配的容量 |
reserve(size_t n) | 预留至少 n 个元素的存储空间 |
resize(size_t n) | 将元素数量调整为 n |
clear() | 清空所有元素 |
insert(iterator pos, val) | 在指定位置插入元素 |
erase(iterator pos) | 删除指定位置的元素 |
begin() / end() | 返回起始/结束迭代器 |
功能实现
私有化基本元素
class student { //class自带private属性
string name;
vector<double> scores;//通过 vecter<#类型>#容器名 来创建一个vector组
int scoresnum;
用于输入学生基本信息的(公共)接口
- 将向用户获取信息写入构造函数,则会在每个新对象创建时要求用户输入
- 用变量
scoresnum来储存学生人数 以便于通过 for循环批量创建对象
student() {
cout << "enter name"<<endl;
cin >> name;
cout << "enter the number of score"<<endl;
cin >> scoresnum;
for (int i = 0; i < scoresnum; ++i) {
cout << "Enter score " << i + 1 << ": ";
double score;
cin >> score;
scores.emplace_back();
用于得到每个学生平均分的(公共)接口
double get_ave() const {
double sum = 0;
for (double score : scores) { //遍历容器中的每一个元素
sum += score;
}
return scores.empty() ? 0 : sum / scores.size();
}
//scores.empty() 是 C++ 中用于检查容器是否为空的成员函数。
//如果容器中没有任何元素,则empty()返回true;否则返回false 。
展示学生的数据
void display() const {
cout << "Name: " << name << endl;
cout << "Average Score: " << get_ave() << endl << endl;
}
主函数
用容器批量声明对象
int main() {
vector<student> students;
int studentsnum;
cout << "enter the number of students: ";
cin >> studentsnum;
for (int i = 0; i < studentsnum; ++i) {
cout << "enter student " << i + 1 << ": ";
students.emplace_back();
students.back().display();
}