如何清除/清空 C++ 数组?Theres array::fill,但看起来只像它的 C++11?我正在使用 VC++ 2010。如何清空它(重置为全 0)?
			
			127541 次
		
7 回答
            31        
        
		
std::fill_n(array, elementCount, 0);
假设array是一个普通数组(例如int[])
于 2012-11-09T12:37:43.763   回答
    
    
            11        
        
		
假设一个a大小为 的 C 样式数组N,其中元素的类型可隐式转换为0,下面将所有元素设置为从 构造的值0。
std::fill(a, a+N, 0);
请注意,这与“清空”或“清除”不同。
编辑:按照 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 );
    于 2012-11-09T12:42:11.630   回答
    
    
            7        
        
		
std::fill(a.begin(),a.end(),0);
    于 2012-11-09T12:38:33.550   回答
    
    
            0        
        
		
如果你想用内在值以外的东西填充数组,std::fill不会删除它;相反,我发现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 对于最简单的情况更快
于 2018-12-15T15:48:59.197   回答
    
    
            0        
        
		
for (auto& a : SomeArray) a = 0;
于 2021-04-19T15:34:39.770   回答
    
    
            -1        
        
		
嘿,我认为处理这种操作的最快方法是 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);
    于 2012-11-09T12:43:08.450   回答
    
    
            -3        
        
		
如果只有 0 那么你可以使用memset:
int* a = new int[6];
memset(a, 0, 6*sizeof(int));
    于 2012-11-09T12:37:52.663   回答