gpt4 book ai didi

c++ - 从数组中删除一个元素

转载 作者:行者123 更新时间:2023-11-28 02:50:09 44 4
gpt4 key购买 nike

我需要从我的 profile[] 数组中删除一个元素,然后移回数组中的所有其他元素以填充现在的空白空间。这是我尝试解决问题的第一部分,给出了一个 -fpermissive 错误,建议?

void deleteCreature(int numCreatures, Creatures profile[])

{

for (int x = 0; x < numCreatures; x++)
{
cout << "The following is a list of all the creatures you take care of:"
<< profile[x].name << endl << endl << endl;

cout << "What creature do you wish to remove?" << endl
<< "CREATURE NAME: ";
cin.ignore();
getline(cin, profile[numCreatures].name);

std::vector<int> array;

auto it = std::find(array.begin(), array.end(), profile[numCreatures].name);
if (it != array.end())
{
array.erase(it);
}
else
{
std::cerr << "Could not find profile!\n";
}

cout << "You have removed " << profile[x].name << "." << endl << endl;*/
}

已编辑

最佳答案

为什么人们坚持要重写现有代码...

标准库为您完成所有工作:

版本 1:(仅在必须使用 C 样式数组时使用)

std::remove(array,array+arraySize,profile[num].name);

然后将最后一个元素设置为零并调整arraySize,完成。

版本 2:(C++ 方法)

将数组的内容保存在 std::vector 中。您可以使用初始化列表或 push_back() 从一个范围内初始化它。

std::vector</*whatever type array stores*/> array;
//Initialize array
array.erase(std::find(array.begin(),array.end(),profile[num].name));

vector自动跟踪其大小和分配的内存,因此您不会弄错。

如果您不确定配置文件是否存在,请在删除之前测试 result_of_find != array.end(),在第一个版本中检查 result_of_remove == arraySize - 2 .

例如在版本 2 中:

std::vector<int> array;
//Initialize array
auto it = std::find(array.begin(),array.end(),profile[num].name);
if (it != array.end()){
array.erase(it);
}
else {
std::cerr << "Could not find profile!\n";
//Handle error
}

关于c++ - 从数组中删除一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23248538/

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