[英]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.