如何删除结构数组的元素?

时间:2014-03-26 18:24:29

标签: c++

我有一个程序,必须在10个零件之间进行选择。一旦用户选择了一个垃圾箱,该程序会询问您是否要添加或删除部件。我的问题是当我尝试添加或从单个垃圾箱中删除时,它会添加并从所有垃圾箱中删除。

struct Inventory
{
    char description[35];
    int num;
};

Inventory parts[Number_Bins] = {
    {"Valve", 10},
    {"Bearing", 5},
    {"Bushing", 15},
    {"Coupling", 21},
    {"Flange", 7},
    {"Gear", 5},
    {"Gear Housing", 5},
    {"Vacuum Gripper", 25},
    {"Cable", 18},
    {"Rod", 12}
};

这是我删除部件的功能。我有另一个添加部件,它是相似的。我可以为数组的每个元素创建10个,但这不是重点。

void RemoveParts(Inventory bins[])
{
    int e = 10;
    int enter2;
    cout << "Enter how many you want to remove\n";
    cin >> enter2;
    if (enter2 < 0)
    {
        cout << "Negative Values are not legal. Try again\n";
    }
    else
    {
        for (int index = 0; index < e; index++)
        {
            bins[index].num = bins[index].num - enter2;
        }
    }
}

我使用开关菜单来拾取任何垃圾箱。所以有10个案例。有什么方法可以让它变得更容易并且编写更少的代码吗?

1 个答案:

答案 0 :(得分:2)

那是因为你在这里循环遍历所有的箱子:

for (int index=0; index<e; index++){     
  bins[index].num = bins[index].num - enter2;
}

如果你想从某个垃圾箱中删除,你必须告诉你的程序是哪一个。

根据我的理解,您想删除整个垃圾箱......

要执行此操作,您必须从数组中删除元素。

我建议使用std::vector<Inventory> parts(Number_Bins)std::array<Inventory, 10> parts;甚至std::list<Inventory> parts(Number_Bins)。然后设置。

然后删除元素只需使用删除

要从array专门删除,您必须移动整个阵列。

//where enter2 is the element we want to erase
for (int index=enter2-1; index<total_size; index++){     
  bins[index] = bins[index + 1]; 
}
// then reinit content of last element
bins[total_size-1] = 0;  

我根本不推荐这条道路,它使一切更难,这感觉就像是轻描淡写。这就是原因:

  • 现在您必须检查将Inventory项设置为0成功将两个变量都设置为0
  • 现在您必须跟踪数组中Initialized个元素的数量
  • 您还需要跟踪数组的大小

这不是C++,没有封装,没有OOP,这可能会迫使您引入global变量,因为您必须跟踪内容。

编写不可扩展且不可维护的代码对您的现在不利,但最重要的是,对您的未来而言。