可视化如何清除C 数组

visual How do I clear a C++ array?

本文关键字:数组 清除 何清除 可视化      更新时间:2023-10-16

我如何清除/空的C 数组?有 array::fill,但看起来只像其C 11?我正在使用VC 2010。如何将其清空(重置为所有0)?

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

假设array是普通数组(例如int[]

假设N大小的C风格数组a,具有从0隐式转换的类型元素,以下将所有元素设置为0

构建的值的所有元素。
std::fill(a, a+N, 0);

请注意,这与"清空"或"清除"。

edit :按照詹姆斯·坎兹(James Kanze)的建议,在C 11中,您可以使用更多的惯用替代方案

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

在没有C 11的情况下,您可以沿着这些行推出自己的解决方案:

template <typename T, std::size_t N> T* end_(T(&arr)[N]) { return arr + N; }
template <typename T, std::size_t N> T* begin_(T(&arr)[N]) { return arr; }
std::fill( begin_( a ), end_( a ), 0 );
std::fill(a.begin(),a.end(),0);

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

是否应该用 inninsic 值以外的其他内容填充数组, std :: fill in nong by dot by dot in of cut 相反,我发现 std ::生成有用。例如我有一个想初始化的列表向量

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

您也可以执行INT,例如

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

或只是

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

但我想STD :: FILL对于最简单的情况

更快

嘿,我认为处理这种操作的最快方法是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);

如果仅为0,则可以使用 memset

int* a = new int[6];
memset(a, 0, 6*sizeof(int));