如何添加枚举类型以引用数组

时间:2011-10-19 16:22:35

标签: c++

我的猜测是。但是我看到的所有示例都创建了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];
    }
  }

3 个答案:

答案 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
};

enumint的标准转换将允许您使用枚举来索引数组。

答案 2 :(得分:0)

如果我正确理解了您的问题,那么我认为您希望使用enum作为数组的索引。如果是这样,那么你可以这样做:

quantity=throw_weight/item_matrix[item_id][weight]; //weight <=> 0
cost_low=(quantity-1)*item_matrix[item_id][cost];   //cost   <=> 1

weightcost的值分别为01,因此上述代码完全正常。如果未提供枚举值,则它以0开头,并随后每个枚举标签递增1