我如何在以下数组上使用fill_n()?

时间:2011-12-22 05:14:27

标签: c++ arrays fill

我有这个数组

 unsigned char        bit_table_[10][100];

用0填充它的正确方法是什么。 我试过了

std::fill_n(bit_table_,sizeof(bit_table_),0x00);

但是vc 2010将其标记为错误。

3 个答案:

答案 0 :(得分:3)

初始化时:

unsigned char bit_table_[10][100] = {};

如果它是类成员,您可以在构造函数中初始化它,如下所示:

MyClass::MyClass()
    :bit_table_()
{}

否则:

std::fill_n(*bit_table_,sizeof(bit_table_),0);

答案 1 :(得分:2)

bit_table_的类型是unsigned char [10][100],它将衰减(即编译器允许将其隐式转换为)unsigned char (*)[100],即指向数组的指针100 unsigned chars

然后将

std::fill_n(bit_table_, ...)实例化为: std::fill_n(unsigned char (*)[100], ...)这意味着它需要unsigned char [100]类型的值来初始化bit_table_0不能转换为该类型,因此编译失败。

另一种思考方式是处理迭代器的STL函数只处理单个维度。如果您传递多维结构,那么STL函数将只处理单个维度。

最终,你不能这样做;无法分配数组类型。即,因为你不能这样做:

char table[100];
char another_table[100]= { };
table= another_table;

你不能在多维数组上使用std::fill_n

答案 2 :(得分:0)

您也可以尝试使用unsigned char bit_table_[10][100]= { 0 }填充零。

int main()
{
    unsigned char        bit_table_[10][100]= { 0 };
    return 0;

}