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
是什么