Syn*_*ter 6 c++ memset multidimensional-array dynamic-arrays
我有一个动态创建的2D数组.
int **abc = new int*[rows];
for (uint32_t i = 0; i < rows; i++)
{
abc[i] = new int[cols];
}
Run Code Online (Sandbox Code Playgroud)
我想用一些值填充数组(比如说1).我可以遍历每个项目并执行它.
但是有一种更简单的方法.我正在尝试使用memset并std::fill_n在本文中提到.
std::fill_n(abc, rows * cols, 1);
memset(abc, 1, rows * cols * sizeof(int));
Run Code Online (Sandbox Code Playgroud)
使用memset会崩溃我的程序.使用fill_n会产生编译错误.
invalid conversion from 'int' to 'int*' [-fpermissive]
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
你可以使用vector:
std::vector<std::vector<int>> abc(rows, std::vector<int>(cols, 1));
Run Code Online (Sandbox Code Playgroud)
您不能使用std::fill_n或memset对abc直接,这是行不通的.您只能在子数组上使用:
int **abc = new int*[rows];
for (uint32_t i = 0; i < rows; i++)
{
abc[i] = new int[cols];
std::fill_n(abc[i], cols, 1);
}
Run Code Online (Sandbox Code Playgroud)
或者使整个事物成为一维的:
int *abc = new int[rows * cols];
std::fill_n(abc, rows*cols, 1);
Run Code Online (Sandbox Code Playgroud)
或者我想你可以std::generate_n结合使用std::fill_n,但这看起来很混乱:
int **abc = new int*[rows];
std::generate_n(abc, rows, [cols]{
int* row = new int[cols];
std::fill_n(row, cols, 1);
return row;
});
Run Code Online (Sandbox Code Playgroud)