从我自己的类类型的指针数组中删除记录

时间:2014-02-27 10:31:37

标签: c++ arrays pointers

我创建了一个Employee类:

class Employee {

private:

    int idNumber;
    string name, department, position;

public:
    Employee() {
        idNumber = 0;
        name = department = position = "";
    }

    Employee(string n, int idn) {
        name = n;
        idNumber = idn;

        department = position = "";
    }

    Employee(string n, int idn, string dep, string pos) {
        name = n;
        idNumber = idn;
        department = dep;
        position = pos;
    }

    void setName(string n) {
        name = n;
    }

    void setidNumber(int idn) {
        idNumber = idn;
    }

    void setDepartment(string dep) {
        department = dep;
    }

    void setPosition(string pos) {
        position = pos;
    }

    string getName() {
        return name;
    }

    int getidNumber() {
        return idNumber;
    }

    string getDepartment() {
        return department;
    }

    string getPosition() {
        return position;
    }

};

现在,我创建了一个类型为Employee的指针的二维数组:

int n=2;
Employee **p = new Employee * [n];

for (int i=0; i < n; i++)
    p[i] = new Employee;

我成功存储了两条记录,如下所示:

Name    ID Number    Department    Position
FS      30           CS            BS
AT      27           CS            BS

我有这段代码来删除员工的记录:

    string del_name;
    int flag = 0;

    cin.ignore();
    cout << "Enter name: ";
    getline(cin, del_name);

    for (int i=0; i < n; i++) {

        while (del_name == p[i]->getName() && i < n) {
            if (del_name == p[i]->getName()) {
                delete p[i];
                p[i] = NULL;
                --k;
                ++flag;
                cout << "Record deleted." << endl;
                break;
            }
            else
            {
                flag = 0;
            }

        }
    }

    if (flag == 0)
        cout << "No record found having name " << del_name << "." << endl;

现在,出现了什么问题:

  1. 如果多次找到记录。即使所有记录都被删除,它也会成功删除。

    • 但是如果所有记录都是唯一的并且我逐个删除记录并且所有记录都以这种方式被删除,那么程序就会被终止。
  2. 此外,还有其他优化方法可以在不使用矢量的情况下删除记录。

  3. 我希望我已经清楚地解释了我的问题。如果需要,我可以提供进一步的细节。

    感谢您抽出时间

1 个答案:

答案 0 :(得分:0)

首先,使用std :: vector&lt;&gt;或其他一些容器对象是解决这个问题的方法。如果您可以编写由专业图书馆作者编写的节拍(速度方面),那么请继续。

第二,你的目标是什么?如果只是根据某些标准解除分配该数组中的条目,那么您编写的循环过于复杂。

bool recordDeleted = false;
for (int i=0; i < n; ++i) 
{
    if (del_name == p[i]->getName()) 
    {
        delete p[i];
        p[i] = NULL;
        recordDeleted = true;
    }
}

if ( !recordDeleted )
{
   // record not found
}