gpt4 book ai didi

c++ - 有什么办法可以删除结构数组中的一个元素?

转载 作者:行者123 更新时间:2023-12-02 10:19:04 26 4
gpt4 key购买 nike

例如,如代码所示。我得到了一个叫做tutor的结构,然后初始化了代码tutor讲师[1000];除了手动将NULL分配给讲师[1]中的每个属性之外,还有什么方法可以删除?还是有一些看起来像这样的代码“lecturer [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

Live Demo on 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

Live Demo on coliru

关于c++ - 有什么办法可以删除结构数组中的一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61006450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com