Я создал класс 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;
}
};
Теперь я создал 2D-массив указателей типа 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
У меня есть этот код, чтобы удалить запись Employees:
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;
Если запись найдена несколько раз. Он успешно удаляется, даже если все записи удаляются.
Кроме того, существует ли какой-либо другой оптимизированный подход для удаления записей без использования VECTORS.
Надеюсь, я четко объяснил свою проблему. При необходимости я могу предоставить дополнительную информацию.
Спасибо за ваше время
Во-первых, использование std :: vector <> или какого-либо другого объекта-контейнера - это способ этого. Если вы можете написать код, который бьет (с точки зрения скорости), написанный профессиональными библиотечными писателями, тогда идите вперед.
Во-вторых, какова ваша цель? Если он просто освобождает записи в этом массиве в зависимости от некоторых критериев, цикл, который вы написали, слишком сложный.
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
}
while (del_name == p[i]->getName() && i < n)
2) Почему в условии цикла while () вы проверяете i <n? Условие цикла for () уже ограничивает значение i меньше n. 3) Почему вы делаете один и тот же тест дважды в цикле while? { if (del_name == p[i]->getName()) {
vector
(и, по-видимому, другихstd::
container)? У вас есть то же самое возражение против умных указателей ?vector
или других вещей. Просто я еще не научился этим вещам.