在动态 2-D 数组中填充 0 的更简洁的方式C++

cleaner way of filling 0's in dynamic 2-D array in C++

本文关键字:简洁 方式 C++ 填充 动态 2-D 数组      更新时间:2023-10-16
int **C = new int*[rows];
    for(int i = 0; i < rows; i++){
        C[i] = new int[cols];
        for(int j = 0; j < cols; j++){
            C[i][j] = 0;
    }
}

我正在创建动态2-D数组,但是我们可以以某些条目中的0个数组来以某种方式初始化数组,而无需使用内部循环?

如果您改用std::vector,它将只是

std::vector<std::vector<int>> C(rows, std::vector<int>(cols));

您可以使用值初始化

进行操作
int **C = new int*[rows]();
for(int i = 0; i < rows; i++)
{
  C[i] = new int[cols]();
}

但是,std ::向量会更好(由于内存管理(。

一个选项是使用std ::填充函数:

int **C = new int*[rows];
for(int i = 0; i < rows; i++)
{
    C[i] = new int[cols];
    std::fill(C[i], C[i] + cols, 0);
}
using namespace std::placeholders;
std::for_each(C, C + rows, std::bind(std::fill_n<int*, std::size_t, int>, _1, cols, 0));

或经常重复使用:

auto fill_row = [] (int i) { return [=] (int* r) { std::fill_n(r, cols, i); }; };
std::for_each(C, C + rows, fill_row(0));