我需要从profile []数组中删除一个元素,然后移回数组中的所有其他元素以填充现在空的空格。这是我尝试做问题的第一部分,给出了一个错误的错误,建议?
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;*/
}
}
EDITED
答案 0 :(得分:2)
为什么人们会坚持重写现有代码......
标准库为您完成所有工作:
版本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
}