有讲座课和学生班。我们正试图用数组来保存讲座课上的学生信息。
例如:
Student * studentList = new Student[numberOfStudent];
studentAdd("Mary");
studentDelete("Mary");
问题: 当用户使用讲座方法之一添加新的用户时,用户不给学生数以及学生数增加。所以我认为我需要一个像structer这样的列表来保存它们但是禁止这项工作。你有什么有效的想法,而不是我的临时解决方案吗?
我的临时解决方案: 保存学生数量和数组大小,当学生人数超过大小的复制数组到比旧的更大的新的。
这个问题与我的分配有关,我们正在通过
强迫这一点*使用指针动态分配内存
*不使用任何具有固定大小的静态数组或其他数据结构 来自标准库的载体
答案 0 :(得分:0)
如果你不想使用对象,你可以使用函数。请注意,我还没有编译此代码。
#include <iostream>
#include <sstream>
#include <string>
#include "Student.h"
void add(Student **list, Student *rhs);
void destroy(Student **list,int const &idx);
void destroy(Student **list,const char* student_name); //find the student name and delete
void resize(Student **list,int const &idx);
Student** begin(Student **list,); //get the first Student
Student** end(Student **list,); //the end of the array
void clear(Student **list,); //drop all Students
int main(int argc, char **argv)
{
if(argc < 2)
{
stc::cerr << "not enough parameters" << std::endl;
}
istringstream buffer(argv[1]);
int value;
buffer >> value;
Student ** studentList = new *Student[value];
int s
add(studentList, "Mary");
destroy(studentList, "Mary");
return(0);
}
void add(Student **list, Student *rhs) { /*definition*/ }
void destroy(Student **list, int const &idx) { /*definition*/ }
void destroy(Student **list, const char* student_name) { /*definition*/ }
void resize(Student **list, int const &idx) { /*definition*/ }
Student** begin(Student **list) { /*definition*/ }
Student** end(Student **list) { /*definition*/ }
void clear(Student **list) { /*definition*/ }
现在只需定义所有内容即可完成
我会使用对象......并考虑到PaulMcKenzie关于容量的说法
class StudentList
{
private:
Student **list;
std::size_t size;
std::size_t capacity;
public:
StudentList(){}
~StudentList(){ this->clear(); }
inline void add(Student *rhs) { //definition }
inline void destroy(int const &idx) { //definition }
inline void destroy(const char* student_name) { //definition }
inline void resize(int const &idx) { //definition }
inline Student** begin() { //definition }
inline Student** end() { //definition }
inline void clear() { //definition }
};
如果可能的话
在向量下方,您会发现类似的实现,它使用迭代器来封装Student**
。