如何删除结构数组的元素

How to delete element of an array of structs?

本文关键字:结构 数组 元素 删除 何删除      更新时间:2023-10-16

我有一个程序,它必须在10箱零件之间做出选择。一旦用户选择了一个bin,程序就会询问您是要添加还是删除部分。我的问题是,当我试图添加或从单个箱中删除它添加和从所有箱中删除。

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 removen";
    cin >> enter2;
    if (enter2 < 0)
    {
        cout << "Negative Values are not legal. Try againn";
    }
    else
    {
        for (int index = 0; index < e; index++)
        {
            bins[index].num = bins[index].num - enter2;
        }
    }
}

我使用开关菜单来拾取任何箱子。所以一共有10种情况。有什么方法可以让它更容易,写更少的代码吗?

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

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

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

根据我的理解,你想要删除整个bin…

要做到这一点,你必须从数组中删除元素。

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

删除元素只需使用remove

要从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变量,因为您必须跟踪内容。

编写不可伸缩和不可维护的代码对你的现在有害,但最重要的是,对你的未来有害。