0

对于一个部分填充的数组,for 循环是什么样的,使您能够继续在第一个打开的元素上输入数据?例如,如果数组设置为最多容纳 50 个元素,但其中未知数量的元素已经满了,那么 for 循环是什么样的,它允许您开始在第一个开放元素上填充更多数据?

4

2 回答 2

0

这取决于元素的类型。如果数组包含指针并且未分配的插槽设置为空,您将搜索空。如果数组是整数数组,首先需要将其初始化为一个特殊的值,例如-1,然后搜索-1。或者,您可以使用以下结构:

struct Element { Element():valid(false){}; bool valid; int val; }

并将分配的元素设置为 true。现在您需要搜索无效的元素:

for (size_t i = 0; i < n; i++) 
   if (!array[i].valid) { 
      array[i].val = val; 
      array[i].valid = true; 
      break; 
   }
于 2013-08-31T21:16:11.517 回答
0
  • 假设您有一个数组 int ar[50];

  • 然后你决定通过调用向 ar 添加 30 个元素;

  • 整数索引 = 0;
  • 无效添加(int a){
  • for(int i = 0; i < 30 && i < sizeof(ar)/sizeof(int); i++) {
  • ar[i] = 一个;
  • 索引++;
  • }
  • }
  • 在此函数 ADD 中,有一个 INDEX 变量,用于跟踪已将多少元素添加到数组中。该变量将表示数组的大小。
  • 现在,当您决定稍后添加更多元素时,首先您需要检查索引是否等于数组大小 50。如果它相等,则您的数组已满并且没有更多空间容纳其他元素,否则如果索引小于 50,那么您可以向其添加更多元素。然后您可以从索引位置开始添加元素,因为这表示数组中最后一个元素的位置。
  • 无效添加(int a){
  • for(int i = 索引; i < sizeof(ar)/sizeof(int); i++) {
  • ar[i] = 一个;
  • 索引++;
  • }
  • }
  • index 变量必须声明为类变量,然后随着元素添加到数组中而递增。
于 2013-09-01T06:45:49.977 回答