在while循环中重新初始化数组
Reinitialize array in while-loop
假设我有如下数组
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指令
有更好的方法吗?
注意,您可以覆盖数组的条目。想想你是否真的需要重新初始化。如果没有,覆盖就足够了。
此外,您可以使用初始化列表{}
,它将数组的项设置为默认值,对于int
是zero
。
用一个数组覆盖示例,我想先用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;
}
你可以使用memset
或std::fill
来重新初始化你的数组。
我不建议再次创建数组,因为语言内部应该搜索连续的内存单元,然后分配它们。每次循环结束时,它都应该取消对数组的分配。
重新初始化必须更快。
[编辑] std::fill
or memset
?
代价是memset
可以更快,而std::fill
更安全。
注意第一个是C
函数,第二个是C++
函数。
只需重用数组,并使用另一个for循环重新初始化其值。这可能是你最好的选择。
相关文章:
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 在函数内部的声明中初始化数组,并在外部使用它
- 为什么用结构初始化数组需要指定结构名称
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- C++使用另一个数组和新值初始化数组
- 初始化数组、"memset"或" {//value} "的最佳方法是什么?
- 在 constexpr 构造函数中初始化数组是否合法?
- 我可以初始化 const 实例,以便我可以将其用作 const 来初始化数组吗?
- 在构造函数中初始化数组
- 是否可以使用函数返回的值初始化数组
- 使用宏使用额外元素初始化数组
- 在循环中显示不同值的初始化数组
- 如何在macOS中的旧扩展clang和gcc编译器中初始化数组和向量
- 使用可变模板列表初始化数组,并放置new
- 使用函数从 Visual Studio 2017 中的 main 创建和初始化数组
- 使用 c++ 中的函数初始化数组
- 这是使用构造函数初始化数组对象的最佳方法吗?
- C++ 使用变量而不是常量表达式初始化数组
- 在初始化列表中初始化数组的更好方法
- 在可变参数模板类中初始化数组