如何编写一个C ++数组打印循环,从每次迭代的不同点开始?

时间:2016-10-24 18:02:59

标签: c++ arrays struct

我有一个包含两个成员变量的结构,每个变量都是一个int。

struct trash
{
  int sector;
  int weight;
};

我有一个数组,其中每个元素都包含其中一个结构。所有数据都是在设定范围内随机生成的。在这种情况下,扇区从1-7随机生成。此外,在这种情况下,阵列的大小为15。因此每个扇区都有一个随机数量的权重变量。我想要完成的是打印出每个扇区的桩。所以格式应该是这样的

Sector 1
Pile 1: xxx
Pile 2: xxx
...
Sector 2
Pile 1: xxx
....
Sector 7

等等,如果这是有道理的

到目前为止,我的尝试是按扇区从最小到最大排序结构数组,然后通过使用for循环遍历数组来打印每个结构的权重变量。简而言之,我只想按扇区排序后按顺序打印出数组,但按扇区分解。我不能为我的生活似乎弄清楚如何以紧凑,简洁的方式实现这一目标。下面是我现在编写的循环,因为内循环每次都在同一点开始,所以它不起作用。

for(int i=0;i<NUM_SEC;i++)
  {
    cout<<"Sector "<<(i+1)<<endl;
    for(int j=0;j<num_piles[i];j++)
    { 
      cout<<"Pile "<<(j+1)<<": "<<data[j].weight<<endl;
      cout<<endl;
    }
  }

任何提示都会受到赞赏,我已经花了好几个小时来处理这个项目的这个小方面而且非常令人沮丧。

2 个答案:

答案 0 :(得分:0)

看起来您不想访问数据[j],而是数据[j + previous_piles]。然后你可以做类似的事情:

int previous_piles = 0;
for(int i=0;i<NUM_SEC;i++)
{
  cout<<"Sector "<<(i+1)<<endl;
  for(int j=0;j<num_piles[i];j++)
  { 
    cout<<"Pile "<<(j+1)<<": "<<data[j+previous_piles].weight<<endl;
    cout<<endl;
  }
  previous_piles += num_piles[i];
}

答案 1 :(得分:0)

您没有记录您的进度!!

请查看以下代码:

int last_pile = 0; // will keep track of the last printed index
for(int i=0;i<NUM_SEC;i++)
{
    cout<<"Sector "<<(i+1)<<endl;

    for( int j = 0; j < num_piles[i]; j++)
    { 
        cout << "Pile " << (j+1) << ": " << data[j+last_pile].weight << endl; // sum last_pile to j
    }

    // updated last printed index
    last_pile += num_piles[i];
    cout << endl; // empty line 'cause finihes with this sector
}

我创建了一个新变量last_pile,它将存储上次访问的索引。然后,在循环内部,我将此变量的值添加到子索引j,以便始终从数组中获取正确的元素。

请注意评论,我在那里添加了有用的信息。