如何清除/清空C ++数组? Theres array::fill
,但看起来只是它的C ++ 11?我正在使用VC ++ 2010.如何清空它(重置为全0)?
答案 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));