在C ++中用动态二维数组填充0的更简洁的方法

时间:2018-02-10 20:49:16

标签: c++

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&#39; s初始化数组吗?

4 个答案:

答案 0 :(得分:5)

如果您使用std::vector,则只会是

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

答案 1 :(得分:3)

您可以使用value initialization

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

然而,std :: vector会更好(因为内存管理)。

答案 2 :(得分:2)

一种选择是使用std::fill功能:

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);
}

答案 3 :(得分: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));