c++ - 有没有办法删除结构数组的一个元素?
问题描述
例如代码中所示。我得到了称为导师的结构,然后我初始化了代码导师讲师[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
笔记:
这种移除有 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
推荐阅读
- javascript - autonumeric.js 中的正最小值
- python - 如何“对数化”我的频谱图输出?
- java - 监听另一个组件中的事件并等待回复
- linkedin - share-offsite url 如何决定使用什么尺寸的图片?
- javascript - jQuery 切换按钮切换所有 div 而不是单个所需的
- c# - C# uniquUE 中的 AES 解密
- python - 用字典在熊猫中的列到行?
- python - Python 中的 Dialogflow API 访问后续意图
- django - 将 pydub 与 AWS 存储的文件一起使用
- spring - Eureka Server 在 Spring Boot 中给出 Whitelabel Error Page 错误