繁体   English   中英

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

[英]How to delete element of an array of structs?

我有一个程序,必须在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种情况。 有什么办法可以使它变得更容易并且编写更少的代码?

那是因为您在这里遍历所有垃圾箱:

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) 然后进行设置。

然后删除元素将仅通过使用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变量,因为您必须跟踪所有内容。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM