在while循环中重新初始化数组

Reinitialize array in while-loop

本文关键字:初始化 数组 while 循环      更新时间:2023-10-16

假设我有如下数组

 char ch[1000];

然后初始化这个char

for (int i = 0; i < 1000; i++) {
   ch[i] = 0;
} 

然后我想在while循环中使用这个数组

 bool active = true;
 int i = 0;
 while(active) {

     ch[i] = ....... // fill the array with certain ashii 
     // code 
     strcpy(string, ch); // after this - I may go back to the top of the loop and startover   
     i++;
 }

这个循环实际上并不是这样的——但这只是一个示意图。问题在这里(和我的问题)-如果我现在想在循环中再次使用这个char-array -也就是转到while循环的顶部并用新字符填充char-variable,从旧字符中清空数组的最佳方法是什么?

1)改变代码,使我在while-loop

中声明这个缓冲区

用for循环重新初始化它似乎不像在循环外那样有效

 for (int i = 0; i < 1000; i++) {
   ch[i] = 0;
 }     

这种方法似乎需要大量的cpu指令

有更好的方法吗?

注意,您可以覆盖数组的条目。想想你是否真的需要重新初始化。如果没有,覆盖就足够了。

此外,您可以使用初始化列表{},它将数组的项设置为默认值,对于intzero

用一个数组覆盖示例,我想先用0填充,然后用1填充。

int a[N] = {}; // I am initialised to the default value already!
int v = 0;
while(v < 2) {
  for(int i =0; i < N; ++i) {
    a[i] = v;
  }
  ++v;
}

你可以使用memsetstd::fill来重新初始化你的数组。

我不建议再次创建数组,因为语言内部应该搜索连续的内存单元,然后分配它们。每次循环结束时,它都应该取消对数组的分配。

重新初始化必须更快。

[编辑]

std::fill or memset ?

代价是memset可以更快,而std::fill更安全。

注意第一个是C函数,第二个是C++函数。

只需重用数组,并使用另一个for循环重新初始化其值。这可能是你最好的选择。