C++ 在while循环中重新初始化数组
假设我有以下数组C++ 在while循环中重新初始化数组,c++,arrays,initialization,C++,Arrays,Initialization,假设我有以下数组 char ch[1000]; 我初始化这个字符 for (int i = 0; i < 1000; i++) { ch[i] = 0; } 实际上,这个循环看起来并不像这样,但这只是示意图。问题就在这里(我的问题是)-如果我现在想在循环中再次使用这个char数组-也就是说,转到while循环的顶部并用新字符填充char变量,那么从旧字符中清空数组的最佳方法是什么 1) 更改代码,以便在while循环中声明此缓冲区 像我在循环外做的那样,用for循环重新初始化
char ch[1000];
我初始化这个字符
for (int i = 0; i < 1000; i++) {
ch[i] = 0;
}
实际上,这个循环看起来并不像这样,但这只是示意图。问题就在这里(我的问题是)-如果我现在想在循环中再次使用这个char数组-也就是说,转到while循环的顶部并用新字符填充char变量,那么从旧字符中清空数组的最佳方法是什么
1) 更改代码,以便在while循环中声明此缓冲区
像我在循环外做的那样,用for循环重新初始化它似乎不太有效
for (int i = 0; i < 1000; i++) {
ch[i] = 0;
}
for(int i=0;i<1000;i++){
ch[i]=0;
}
这种方法似乎需要大量的cpu指令
有更好的方法吗?请注意,您可以覆盖数组的条目。如果您真的需要重新初始化,请思考。如果没有,覆盖就足够了 此外,您可以使用初始值设定项列表,
{}
,它将数组的条目设置为它们的默认值,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;
}
inta[N]={};//我已初始化为默认值!
int v=0;
而(v<2){
对于(int i=0;i
您可以使用或重新初始化阵列
我不建议再次创建数组,因为语言应该在内部搜索相邻的内存单元,然后分配它们。每次循环结束时,它都应该取消分配数组
重新初始化必须更快
[编辑]
取舍是memset
可以更快,而std::fill
更安全
请注意,第一个是
C
函数,第二个是C++
函数。请注意,您可以覆盖数组的条目。如果您真的需要重新初始化,请思考。如果没有,覆盖就足够了
此外,您可以使用初始值设定项列表,{}
,它将数组的条目设置为它们的默认值,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;
}
inta[N]={};//我已初始化为默认值!
int v=0;
而(v<2){
对于(int i=0;i
您可以使用或重新初始化阵列
我不建议再次创建数组,因为语言应该在内部搜索相邻的内存单元,然后分配它们。每次循环结束时,它都应该取消分配数组
重新初始化必须更快
[编辑]
取舍是memset
可以更快,而std::fill
更安全
请注意,第一个是
C
函数,第二个是C++
函数。请注意,您可以覆盖数组的条目。如果您真的需要重新初始化,请思考。如果没有,覆盖就足够了
此外,您可以使用初始值设定项列表,{}
,它将数组的条目设置为它们的默认值,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;
}
inta[N]={};//我已初始化为默认值!
int v=0;
而(v<2){
对于(int i=0;i
您可以使用或重新初始化阵列
我不建议再次创建数组,因为语言应该在内部搜索相邻的内存单元,然后分配它们。每次循环结束时,它都应该取消分配数组
重新初始化必须更快
[编辑]
取舍是memset
可以更快,而std::fill
更安全
请注意,第一个是
C
函数,第二个是C++
函数。请注意,您可以覆盖数组的条目。如果您真的需要重新初始化,请思考。如果没有,覆盖就足够了
此外,您可以使用初始值设定项列表,{}
,它将数组的条目设置为它们的默认值,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;
}
inta[N]={};//我已初始化为默认值!
int v=0;
而(v<2){
对于(int i=0;i
您可以使用或重新初始化阵列
我不建议再次创建数组,因为语言应该在内部搜索相邻的内存单元,然后分配它们。每次循环结束时,它都应该取消分配数组
重新初始化必须更快
[编辑]
取舍是memset
可以更快,而std::fill
更安全
请注意,第一个是
C
函数,第二个是C++
函数。只需重用数组,并使用另一个for循环重新初始化其值。这可能是您的最佳选择。只需重用数组,并使用另一个for循环重新初始化其值。这可能是您的最佳选择。只需重用数组,并使用另一个for循环重新初始化其值。这可能是您的最佳选择。只需重用数组,并使用另一个for循环重新初始化其值。这可能是您的最佳选择。您不需要“清空数组”,只需重新使用它即可。此外,如果您只对之后显式覆盖的元素感兴趣,那么将所有元素归零就毫无意义。它只需要花费时间和代码。while循环中的i
是什么