从数组中删除元素

时间:2014-04-23 15:14:54

标签: c++

我需要从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

1 个答案:

答案 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
}