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

时间:2014-05-11 14:29:59

标签: c++ arrays initialization

假设我有以下数组

 char ch[1000];

我初始化这个字符

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数组 - 那就是转到while循环的顶部并用新字符填充char变量,最好的方法是什么从旧字符中清空数组。

1)更改代码,以便在while-loop

中声明此缓冲区

使用for循环重新初始化它似乎没有效果,就像我在循环之外做的那样

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

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

有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

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

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

使用我首先要填充零的数组覆盖示例,然后使用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重新初始化阵列。

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

重新初始化必须更快。

[编辑]

std::fill or memset?

权衡是memset可以更快,std::fill更安全。

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

答案 1 :(得分:0)

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