如何使用动态内存分配在现有阵列中创建和添加新对象

时间:2019-01-20 11:52:35

标签: c++ new-operator dynamic-memory-allocation

我正在尝试使用C ++做一些事情,我是新手:)

我尝试了一种班级计划来获取学生详细信息并打印输出。

#include <iostream>
using namespace std;

#define MAX 10

class student
{
    private:
        char  name[30];
        int   rollNo;
        int   total;
        float perc;
    public:
        //member function to get student's details
        void getDetails(void);
        //member function to print student's details
        void putDetails(void);
};

//member function definition, outside of the class
void student::getDetails(void){
    cout << "Enter name: " ;
    cin >> name;
    cout << "Enter roll number: ";
    cin >> rollNo;
    cout << "Enter total marks outof 500: ";
    cin >> total;
    perc=(float)total/500*100;
}

//member function definition, outside of the class
void student::putDetails(void) {
    cout << "Student details:\n";
    cout << "Name:"<< name << ",Roll Number:" << rollNo << ",Total:" << total << ",Percentage:" << perc;
}

int main()
{
    student std[MAX];       //array of objects creation
    int n,loop;

    cout << "Enter total number of students: ";
    cin >> n;

    for(loop=0;loop< n; loop++){
        cout << "Enter details of student " << loop+1 << ":\n";
        std[loop].getDetails();
    }

    cout << endl;

    for(loop=0;loop< n; loop++) {
        cout << "Details of student " << (loop+1) << ":\n";
        std[loop].putDetails();
    }

    return 0;
}

它是非常基本的代码,可以正常工作,我能够提供输入并打印输出。

现在,我想在运行时使用动态内存分配来添加新的Student对象,并希望将该对象添加到现有对象数组中(这样我就可以获得所有学生的最高,最低分数)

  

我知道我需要为此使用new运算符。

但是我不确定编写此解决方案的最佳方法是什么。

我们将不胜感激任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

IMO,使用动态内存执行此操作的最佳方法是使用std::unique_ptrstd::shared_ptr(这实际上取决于要求)。

以下是unique_ptr用法的一个示例:

using StudentPtr = std::unique_ptr<student>;

int main() {
    std::vector<StudentPtr> studentDetails;
    int n;

    cout << "Enter the number of students: ";
    cin >> n;

    studentDetails.resize(n);

    for (auto &s: studentDetails) {
        s = StudentPtr(new student);
        s->getDetails();
    }

    return 0;
}

要获取最小值和最大值,可以分别使用STL提供的min_elementmax_element