有没有办法删除结构数组中的一个元素



例如,如代码中所示。我得到了一个名为导师的结构,之后我初始化了代码导师讲师[1000];除了手动为讲师[1]中的每个属性指定NULL之外,还有什么方法可以删除讲师[1]吗?或者有一些代码看起来像"讲师[1]=NULL"?谢谢你花时间阅读和回答。

注意:假设我已经初始化并填充了讲师[0]、讲师[1]和讲师[2]的所有属性。

struct tutor {
int tutorID;
string name;
string date_Joined;
string date_Terminated;
double hourlyPayRate;
string phone;
string address;
int center_Code;
string center_Name;
int subject_Code;
string subject_Name;
int rating;
};
.
.
.
tutor lecturer[1000];

无法从数组中删除元素。

唯一的可能性是将以下所有元素下移一个索引。因此,应该注意的是,由于阵列的大小也不能改变,所以使用的元素的数量已经减少了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上的实时演示

最新更新