我的猜测是。但是我看到的所有示例都创建了item_type的实例,例如item_type_instance。但是我的情况更简单......我想要一些描述我的数组的东西,而不只是使用0和1。
enum item_type {weight, cost};
然后将重量和成本替换为0和1。
void algo(int cost_low,int cost_high,int throw_weight, int item_id)
{
int quantity,remainder;
quantity=throw_weight/item_matrix[item_id][0];
remainder=throw_weight%item_matrix[item_id][0];
if(remainder==0)
{
cost_low=(quantity-1)*item_matrix[item_id][1];
cost_high=quantity*item_matrix[item_id][1];
throw_weight-=(quantity-1)*item_matrix[item_id][0];
}
else
{
cost_low=quantity*item_matrix[item_id][1];
cost_high=(quantity+1)*item_matrix[item_id][1];
throw_weight-=quantity*item_matrix[item_id][0];
}
}
答案 0 :(得分:3)
当然你可以这样做;但你宁愿代表item
中的item_matrix
代表一个比数组更有意义的东西吗?
struct Item {
int weight;
int cost;
};
这可能会使您的算法更具可读性:
void algo(int cost_low,int cost_high,int throw_weight, int item_id)
{
int quantity,remainder;
Item& item = item_matrix[item_id];
quantity=throw_weight/item.weight;
remainder=throw_weight%item.weight;
if(remainder==0)
{
cost_low=(quantity-1)*item.cost;
cost_high=quantity*item.cost;
throw_weight-=(quantity-1)*item.weight;
}
else
{
cost_low=quantity*item.cost;
cost_high=(quantity+1)*item.cost;
throw_weight-=quantity*item.cost;
}
}
有可能进一步重构,并将计算委托给Item
。
- 编辑
我无法抗拒...... 可以委托给Item
本身,删除所有item.xxx
符号。
struct Item {
int weight;
int cost;
void algo( int& cost_low, int& cost_high, int& throw_weight ) {
int quantity = throw_weight / weight;
int remainder = throw_weight % weight;
cost_low=(quantity-1)*cost;
cost_high=quantity*cost;
throw_weight -= (quantity-1)*weight;
if( remainder != 0 ) {
cost_low += cost;
cost_high += cost;
throw_weight += weight;
}
}
};
用法:
item_matrix[item_id].algo( cost_low, cost_high, throw_weight );
答案 1 :(得分:1)
只需将枚举数定义为0和1:
enum item_type
{
weight = 0
, cost = 1
};
从enum
到int
的标准转换将允许您使用枚举来索引数组。
答案 2 :(得分:0)
如果我正确理解了您的问题,那么我认为您希望使用enum
作为数组的索引。如果是这样,那么你可以这样做:
quantity=throw_weight/item_matrix[item_id][weight]; //weight <=> 0
cost_low=(quantity-1)*item_matrix[item_id][cost]; //cost <=> 1
weight
和cost
的值分别为0
和1
,因此上述代码完全正常。如果未提供枚举值,则它以0
开头,并随后每个枚举标签递增1
。