如何清除C ++数组?

时间:2012-11-09 12:36:29

标签: c++ visual-c++

如何清除/清空C ++数组? Theres array::fill,但看起来只是它的C ++ 11?我正在使用VC ++ 2010.如何清空它(重置为全0)?

7 个答案:

答案 0 :(得分:21)

std::fill_n(array, elementCount, 0);

假设array是正常数组(例如int[]

答案 1 :(得分:6)

假设一个大小为a的C样式数组N,其中一个类型的元素可以从0隐式转换,下面将所有元素设置为从{{1}构造的值}。

0

请注意,这与“清空”或“清除”不同。

编辑:根据詹姆斯坎泽的建议,在C ++ 11中你可以使用更惯用的替代

std::fill(a, a+N, 0);

在缺少C ++ 11的情况下,您可以按照这些方针推出自己的解决方案:

std::fill( std::begin( a ), std::end( a ), 0 );

答案 2 :(得分:5)

std::fill(a.begin(),a.end(),0);

答案 3 :(得分:0)

嘿,我认为处理这种操作的最快方法是memset()内存。

实施例 -

<强> memset(&myPage.pageArray[0][0], 0, sizeof(myPage.pageArray));

类似的C ++方式是使用std :: fill

char *begin = myPage.pageArray[0][0];
char *end = begin + sizeof(myPage.pageArray);
std::fill(begin, end, 0);

答案 4 :(得分:0)

如果您想用除值以外的其他值清除数组,std :: file不会将其剪切;相反,我发现std :: generate有用。例如我有一个要初始化的列表向量

std::generate(v.begin(), v.end(), [] () { return std::list<X>(); });

您也可以进行整数操作

std::generate(v.begin(), v.end(), [n = 0] () mutable { return n++; });

或者只是

std::generate(v.begin(), v.end(), [] (){ return 0; });

但是我想std :: fill在最简单的情况下会更快

答案 5 :(得分:0)

for (auto& a : SomeArray) a = 0;

答案 6 :(得分:-3)

如果只有0,那么你可以使用memset

int* a = new int[6];

memset(a, 0, 6*sizeof(int));