Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用动态分配创建数组并向其中插入元素_C++_Arrays_Dynamic_Allocation - Fatal编程技术网

C++ 使用动态分配创建数组并向其中插入元素

C++ 使用动态分配创建数组并向其中插入元素,c++,arrays,dynamic,allocation,C++,Arrays,Dynamic,Allocation,我想做一个图书馆管理系统作为作业 class student { char ID_number[30]; char Student_name[30]; public: void create_student() { cout<<"\nEnter The ID Number "; cin>>ID_numb

我想做一个图书馆管理系统作为作业

class student
{
          char ID_number[30];
          char Student_name[30];
      public:
          void create_student()
          {
                    cout<<"\nEnter The ID Number ";
                    cin>>ID_number;
                    cout<<"\n\nEnter The Name of The Student: ";
                    cin>>Student_name;

                    cout<<"\n\nStudent Created Successfully"<<endl;
          }
          void show_student()
          {
                    cout<<"\nID Number: "<<ID_number;
                    cout<<"\nStudent Name: ";
                    cin.getline(Student_name,30);


          }
班级学生
{
字符ID_编号[30];
学生姓名[30];
公众:
void create_student()
{
库蒂德数;
学生姓名;

CUT< P>因为C++是C++代码,而不是C语言,所以我建议使用一个字符串类,比如<代码> STD::String < /C>,而不是原始<代码> char < /Cord>数组,例如:

std::string student_name;
如果您想在内存中存储学生列表,我建议使用
std::vector
容器,例如:

std::vector<Student> students;
要添加新的学生,请将其复制到
student\u count
给定的数组索引中,然后将此变量增加1,指向预分配数组中的下一个空闲插槽

您必须注意不要使阵列的容量溢出。一旦预分配的阵列已满,如果要添加新学员,您需要分配一个容量更大的新阵列。您可以使用2倍或1.5倍的比例因子来计算新容量

别忘了释放先前分配给
delete[]
的内存

如果这样做,基本上就是从头开始实现
std::vector
(即使此标准容器具有其他高级功能,如移动语义等)。

std::vector
std::vector
,如果需要
指针

添加新学员:

Student* newStudent = new Student(name);

vector.append(newStudent);
阅读名为“Victor”的学生,然后删除:

Student* victor;
for(int i = 0; i<vector.size();i++) {
    if(vector.at(i)->getName() == "Victor") {
        victor = vector.at(i);
        break;
    }
 }
//Then you can delete it
delete(victor);
Student*victor;
对于(int i=0;igetName()=“Victor”){
victor=向量。at(i);
打破
}
}
//然后你可以删除它
删除(victor);

如果“动态”是指你想创建“一些”备用记录,但不确定有多少记录不需要担心是否需要新建或删除。只需使用向量即可

std::vector<student> students;
while(!bored)
{
    student latest;
    latest.creat_student(); // this looks a bit odd, perhaps it should be a free function...
    vector.push_back(latest);
    //TODO - see if I am bored yet
}

令人失望的是,您的代码> StJug学生方法未被声明为const,您应该考虑。

索引一个特定的学生,你可以使用<代码>学生[17 ] 或你想要的任何索引。如果你提供了一种获取属性的方法(当然可以考虑使用<代码> STD::String 而不是<代码> char */COD>)

,那么你就可以使用STD算法给特定属性的学生使用STD算法。
如果你真的想使用
student
的原始数组,那么类似的方法是可行的,但是如果5或你选择的任何东西都不够,你就会进入reallocs等。这是选择
std::vector
的一个令人信服的理由

student * them = new student[5];
for (size_t i = 0; i < 5; ++i)
{
    student latest;
    latest.create_student();
    them[i] = latest;
}

for (size_t i = 0; i < 5; ++i)
{
    them[i].show_student();
}
delete[] them;
student*them=新生[5];
对于(尺寸i=0;i<5;++i)
{
学生最新;
最新。创建_student();
他们[我]=最新的;
}
对于(尺寸i=0;i<5;++i)
{
他们[我]。秀给学生看();
}
删除[]条;

您可以使用
std::vector
。很遗憾,对于这个任务,我只能使用动态分配,我想我可以这样做,但必须列出一个特定的数组大小
vector
来提供动态分配。您不需要指定它的大小来编写自己的
vector
。很抱歉,我不是很清楚,我需要使用new[]和delete[]不是矢量,但字符串不允许它在空格后读取超过word的内容否?我希望它读取一整行字符,即“john doe”,如果我使用字符串和cin>>学生名,它只会得到“john”忽略其余部分,我只能在作业中使用动态分配,事实上,这是作业的重点。编辑:为了清楚起见,我需要使用new[]和delete[]否vectors@00qq00:问得好。使用
getline(cin,学生名);
。谢谢你的帮助!你知道如何使用new[]delete[]代替矢量?谢谢,我会继续,tryI只能使用new[]和delete[],所以你知道如何以及在何处插入它们吗?我不知道new和delete是什么意思。public:void*操作符new[](size_t){return 0;}void操作符delete[](void*){};int main(){MyClass*pMyClass=new MyClass[5];delete[]pMyClass;}如果你坚持使用c型数组,我需要使用类似的方法,比如说为什么要定义自己的数组?这是学生练习吗?如果它是@Mr.C64比我的好。好吧,那么使用new和delete,我每次都必须声明数组的大小?没错-刚刚添加了一个编辑。Vector为您处理此问题,并在需要时重新分配。如果使用原始阵列,则需要自己执行此操作。
for (auto item : students)
{
    item.show_student();
}
student * them = new student[5];
for (size_t i = 0; i < 5; ++i)
{
    student latest;
    latest.create_student();
    them[i] = latest;
}

for (size_t i = 0; i < 5; ++i)
{
    them[i].show_student();
}
delete[] them;