假设我有以下数组
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指令
有更好的方法吗?
答案 0 :(得分:3)
请注意,您可以覆盖数组的条目。想想你是否真的需要重新初始化。如果没有,覆盖就足够了。
此外,您可以使用初始化列表{}
,它会将数组的条目设置为默认值,int
为zero
。
使用我首先要填充零的数组覆盖示例,然后使用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;
}
我不建议再次创建数组,因为语言内部应该搜索contigius内存单元然后分配它们。每次循环结束时,都应该取消分配数组。
重新初始化必须更快。
[编辑]
权衡是memset
可以更快,std::fill
更安全。
请注意,第一个是C
函数,第二个是C++
函数。
答案 1 :(得分:0)
只需重用数组,然后使用另一个for循环重新初始化其值。这可能是你最好的选择。