Невозможно удалить элемент из массива.
Единственная возможность - переместить все последующие элементы на один индекс вниз. Таким образом, где-то следует отметить, что количество используемых элементов было уменьшено на 1, поскольку размер массива также нельзя изменить.
(Лучшая замена будет std::vector
, конечно.)
Демонстрация того, как удалить элемент из массива:
#include <iostream>
#include <string>
struct tutor {
int tutorID;
std::string name;
};
std::ostream& operator<<(std::ostream &out, const tutor &entry)
{
return out << "ID: " << entry.tutorID << ", name: " << entry.name;
}
int main()
{
tutor lecturer[1000];
size_t n = 0;
// fill array
lecturer[n++] = { 1, "Klaus" };
lecturer[n++] = { 2, "Dieter" };
lecturer[n++] = { 3, "Barbara" };
lecturer[n++] = { 4, "Elisabeth" };
// print array
for (size_t i = 0; i < n; ++i) {
std::cout << i << ": " << lecturer[i] << '\n';
}
// remove element 1 (He got COVID-19.)
size_t j = 1;
std::cout << "Remove " << j << ": " << lecturer[j] << '\n';
for (size_t i = j + 1; i < n; ++i) {
lecturer[i - 1] = lecturer[i];
}
--n; // remark that array has been shortened by 1
// print array
for (size_t i = 0; i < n; ++i) {
std::cout << i << ": " << lecturer[i] << '\n';
}
}
Вывод:
0: ID: 1, name: Klaus
1: ID: 2, name: Dieter
2: ID: 3, name: Barbara
3: ID: 4, name: Elisabeth
Remove 1: ID: 2, name: Dieter
0: ID: 1, name: Klaus
1: ID: 3, name: Barbara
2: ID: 4, name: Elisabeth
Демонстрация в реальном времени на coliru
Примечание:
Этот тип удаления имеет O (N) (наихудший случай).
Этого можно добиться быстрее, переместив последний элемент на место убранного. Это имеет O (1) (каждый случай), но может использоваться, только если порядок элементов не важен.
В этом случае удаление будет:
// remove element 1 (He got COVID-19.)
size_t j = 1;
std::cout << "Remove " << j << ": " << lecturer[j] << '\n';
lecturer[j] = lecturer[--n];
Вывод:
0: ID: 1, name: Klaus
1: ID: 2, name: Dieter
2: ID: 3, name: Barbara
3: ID: 4, name: Elisabeth
Remove 1: ID: 2, name: Dieter
0: ID: 1, name: Klaus
1: ID: 4, name: Elisabeth
2: ID: 3, name: Barbara
Живая демоверсия на coliru